У меня есть основной инструмент C # .NET, который очищает HTML, 10K-250K + записей.Он стабилен, и вся память правильно обрабатывается и утилизируется (WebRequests, Responses, Streams)
, в памяти ничего не сохраняется, поскольку выходные данные записываются непосредственно в файлы, но использование памяти продолжает расти ... и расти ... и расти.Все, что находится в памяти, это byte[]
, а затем string
версии активно обрабатываемых страниц, которые не превышают 500 одновременно.Затем работа заканчивается, и все, что связано с ее деятельностью, удаляется, все единицы работ теряют все ссылки, память не уменьшается.Он остается в 3-5 ГБ используемой оперативной памяти.
Наконец, все действия заканчиваются, я выхожу из функции, где работа выполнена, я переводю ее в состояние ожидания через Console.ReadKey()
, но память не освобождаетсядаже после 15 минут бездействия в инструменте.Теперь ... если я напишу GC.Collect в конце, память мгновенно падает до 30 МБ с 3-5 ГБ.Хм ... Это ожидаемое поведение, учитывая код, фактическое использование памяти не должно превышать 250 МБ ОЗУ.
Если бы я написал то же самое на C ++, я бы не превысил 250 МБ ОЗУ, несмотря ни на что,C ++ стремится освободить память, которую я освобождаю в коде.Хорошо, что так.
Вопрос : Почему это непристойное использование памяти не очищается даже после нескольких минут простоя в инструменте, но если я заставляю Collect, он мгновенно падает догде это должно быть?И почему использование памяти продолжает расти, если я знаю, что все объекты удаляются и теряют все ссылки после обработки.