babylon,
Я не сторонник использования дополнительных библиотек без существенной на это необходимости. Зачем привлекать лишние сущности, если можно писать на чистом C#? В своей реализации использовал Generic-коллекции .NET только потому, что с ними быстрее работает и код короче, т. к. не нужно реализовывать свои контейнеры.
Окей, раз GC.COllect() помогает — есть два варианта. Первый — он дефрагментирует память, и туда влезает больше TreeNodeEnd. Тут уже ничего поделаешь, ограничение памяти.
Oxoron, в данном случае похоже имеет место именно этот случай. При 16 переменных на одной из итераций выделяется порядка десятка миллионов объектов TreeNodeEnd, что банально не хватает памяти.
Если бы TreeNodeEnd была структурой, то это несколько бы съэкономило память. Но т. к. в коде используются указатели на TreeNodeEnd, которые в том числе могут иметь значение NULL, то этот вариант реализовать не получается.
По поводу пула объектов не получится, т. к. нехватка памяти происходит в одном месте одной процедуры, где массово создаются объекты типа TreeNodeEnd. “Вылечить” я это пытался путём полной сборки мусора перед вызовом этой процедуры примерно так:
…
GC.Collect();
Skleivanie(…);
…
private void Skleivanie(…)
{
…
foreach (…)
{
…
new TreeNodeEnd(…); //Здесь происходит ошибка выделения памяти
…
}
…
}
Но при количестве входных переменных больше 15 происходит столько выделений TreeNodeEnd, что памяти не хватает.
Хорошие времена были. Сам начинал программировать в школе на бэйсике. Также был калькулятор МК-61. В институте ассемблер, C, С++. В НИИ, куда пришёл работать после, поначалу была одна 286 машина на коллектив из 10 человек. Так вот по очереди и работали.
Я не сторонник использования дополнительных библиотек без существенной на это необходимости. Зачем привлекать лишние сущности, если можно писать на чистом C#? В своей реализации использовал Generic-коллекции .NET только потому, что с ними быстрее работает и код короче, т. к. не нужно реализовывать свои контейнеры.
Прошёл по ссылке, которая есть в статье на сайт, где выложен архив программы, но не понял как ею пользоваться и исходников там тоже нет.
Oxoron, в данном случае похоже имеет место именно этот случай. При 16 переменных на одной из итераций выделяется порядка десятка миллионов объектов TreeNodeEnd, что банально не хватает памяти.
Если бы TreeNodeEnd была структурой, то это несколько бы съэкономило память. Но т. к. в коде используются указатели на TreeNodeEnd, которые в том числе могут иметь значение NULL, то этот вариант реализовать не получается.
Но при количестве входных переменных больше 15 происходит столько выделений TreeNodeEnd, что памяти не хватает.