использование памяти в приложении C # (.NET) очень высоко, пока я не вызову System.GC.Collect () - PullRequest
3 голосов
/ 25 апреля 2010

Я написал приложение, которое вращает несколько потоков, каждый из которых читает несколько МБ памяти. Затем каждый поток подключается к Интернету и загружает данные. это происходит тысячи раз, и каждая загрузка занимает некоторое время

Я наблюдаю ситуацию, когда (проверено с помощью windbg / sos и! Dumpheap), что байт [] не собирается автоматически, из-за чего в диспетчере задач сообщается о 100/150 МБ памяти

если я вызываю System.GC.Collect (), я вижу огромное падение памяти, более 100 МБ

Мне не нравится вызывать System.GC.Collect (), и на моем компьютере есть тонны свободной памяти. однако, если кто-то посмотрит на TaskManager, он будет обеспокоен, думая, что мое приложение ужасно течет.

советы?

Ответы [ 2 ]

12 голосов
/ 25 апреля 2010

Среда выполнения использует большой объем свободной памяти, чтобы уменьшить влияние сборщика мусора на производительность вашего приложения. «Проблема» в этом заключается в общем отсутствии понимания (например, ваших пользователей), что, когда система имеет больше памяти, ее можно использовать (в противном случае, какой в ​​этом смысл?).

3 голосов
/ 26 апреля 2010

Проблема в том, что некоторые пользователи проверяют использование памяти и процессора и сообщают, что ваше приложение потребляет слишком много, даже если с их производительностью нет проблем. Я думаю, что они делают это, чтобы показать своему боссу / девушке / товарищам, как много они знают о компьютерах.

Тщательно размещенный CG.Collect в вашем приложении, вероятно, уменьшит эту человеческую (а не компьютерную) проблему. Я думаю, ты должен это сделать.

...