2010-11-17 6 views
3

У меня есть большое приложение .NET, которое в настоящее время поражает частный рабочий набор размером 865 МБ.Куча с управляемой кучей

Итак, я запустил VMMap и увидел, что куча составляет около 587 МБ, а управляемая куча - всего 255 МБ (также частный рабочий набор).

Нормально ли иметь этот неуправляемый код, используя так много памяти (что, я полагаю, используется в среде исполнения .net)?

Примечание: Я использовал WinDbg с расширением SOS. Проблема заключается не в потреблении памяти в управляемой куче, а в «неуправляемой» куче.

Скриншот VMMap: http://img687.imageshack.us/img687/1529/vmmap.png

Подробнее: Общая площадь: 1487MB поручены: 1359MB Private: 931MB Всего WS: 967MB Private WS: 865MB Free (размер): 609MB

Заранее спасибо.

ответ

0

Да! неуправляемые объекты, если они не освобождены должным образом, могут даже вызвать утечку памяти. Однажды я обнаружил, что объект obcconnection ест гигабайты RAM (он пытался открыть/закрыть соединения в цикле). так что приложение, в конечном счете, выйдет из памяти и потерпит крах.

Какие неуправляемые объекты вы имеете в виду?

0

Используйте CLRProfiler (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&DisplayLang=en), чтобы узнать, какие объекты находятся в куче.

Примечание. Версия .NET 2.0 также работает с .NET 4.0.

+1

FYI, .NET 3.5 использует CLR 2.0 - он был 4.0, который обновил его –

+0

возможно более легкий и быстрый, чтобы начать SOS http://msdn.microsoft.com/en-us/library/bb190764.aspx – user44298

+0

@Richard спасибо, отредактирован. – Nick

Смежные вопросы