Память приложения NET Core продолжает расти, даже если она правильно удалена / не имеет ссылок - PullRequest
0 голосов
/ 15 мая 2018

У меня есть основной инструмент 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, он мгновенно падает догде это должно быть?И почему использование памяти продолжает расти, если я знаю, что все объекты удаляются и теряют все ссылки после обработки.

...