Почему существует огромная разница между числами GC.GetTotalMemory () и CLR Profiler? - PullRequest
5 голосов
/ 12 июня 2011

У меня есть объект, который мне нужен для кэширования нескольких из них для веб-приложения в IIS, поэтому я анализирую, сколько памяти использует каждый экземпляр.

Я написал маленькую exe, и я звоню GC.GetTotalMemory(true) до и после создания, и разница составляет около 335 КБ, но если проанализировать его в CLR profiler, он показывает, что 22 МБ памяти используется объект, который не имеет смысла.

Что я неправильно интерпретирую в профилировщике CLR?
Где я должен проверить в профилировщике, чтобы увидеть размеры отдельных объектов?

1 Ответ

1 голос
/ 12 июня 2011

Согласно MSDN: сборщик мусора не гарантирует, что вся недоступная память будет собрана.

смотрите здесь

CLR-профилировщик показывает всю выделенную память;

Что если вы используете GC.GetTotalMemory (false), каков результат?

...