OutOfMemoryException, большие личные данные

В предыдущих сериях:

OutOfMemoryException, размер стека огромен, большое количество потоков

У меня есть служба Windows.net, которая потребляет много памяти. Куча GC не большая. Также размер стека не большой. То, что является большим, называется приватными данными. Также я вижу в диспетчере задач, что мое приложение потребляет много чего-то, что менеджер задач называет дескриптором. Мое приложение потребляет 2326 ручек. Я считаю, что эти дескрипторы - это некоторые дескрипторы окон, которые занимают личные данные. Я вижу, что эти личные данные заняты блоками, помеченными как Блок среды потока. Что это такое?

Скриншот использования памяти моего приложения VMMap

Снимок экрана: использование памяти моим приложением диспетчером задач

ОБНОВИТЬ

Я запускаю ProcessExplorer. У меня есть два экземпляра моего сервиса, работающего в данный момент. Я вижу, что они потребляют много виртуальной памяти для Gen2 GC. Это выглядит подозрительно. Также общее количество, зарезервированное для размера кучи GC, одинаково для двух процессов.

http://i021.radikal.ru/1003/27/304433b1ae29.jpg

2 ответа

Решение

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

Самый эффективный способ избавиться от такой проблемы - использовать WinDBG + SOS и команду! Gcroot. Пример исследования ошибки утечки памяти можно найти здесь: http://blogs.msdn.com/tess/archive/2008/04/03/net-debugging-demos-lab-7-memory-leak-review.aspx

Удачи!

Да, довольно большой ресурс. Я предполагаю переменные, которые вы пометили атрибутом [ThreadStatic]. У тебя слишком много тем.

Другие вопросы по тегам