Сборка мусора .NET здесь не работает должным образом? - PullRequest
3 голосов
/ 15 июня 2011

У нас был скрипт преобразования изображений, работающий в .NET 4.0, IIS 7, ASP.NET, 4 ГБ ОЗУ сервера, который изменяет размеры больших изображений и, следовательно, требует много памяти.

Первый сценарий увеличил использование памятипочти до 100%, практически ничего не оставляя для SQL Server, который также работал (который занимал память до 20 МБ вместо обычных 900 МБ).

Во втором сценарии мы добавили GC.Collect () и (чтобы быть уверенным) один поток потока спит после каждого цикла, и все возвращается в нормальное состояние.

Вопрос: не является ли это недостатком в управлении памятью .NET?Разве система не должна более внимательно посмотреть на то, что происходит с доступной памятью, замедлить работу и очистить систему?

Ответы [ 3 ]

4 голосов
/ 15 июня 2011

Согласно документам :

Сборка мусора происходит автоматически, когда запрос на память не может быть выполнен с использованием доступной свободной памяти.

IПредположим, что эта ситуация не была удовлетворена, поскольку SQL Server выполняет резервное копирование.Что касается того, чтобы быть ошибкой;Документы предполагают, что это сделано по замыслу.

1 голос
/ 16 августа 2012

Да, сборщик мусора выполняет свою работу, когда памяти недостаточно для следующей операции. Но.

Объекты, которые объявлены глобальными или используются глобальными объектами, не затрагиваются GC. Поэтому старайтесь держать ваши объекты локально, если это возможно.

0 голосов
/ 15 июня 2011

Это может быть недостатком в управлении памятью .Net. Нам нужен ваш код, чтобы быть уверенным.

Но я бы сначала посмотрел в вашем коде случаи, когда одноразовые ресурсы распределяются неправильно. Известно, что это вызывает утечки памяти и является причиной существования интерфейса IDisposable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...