У меня есть процесс, занимающий 130 МБ памяти, согласно диспетчеру задач, и только 11 МБ живых объектов .NET, согласно dotTrace, поэтому мне интересно, что происходит с остальные 120мб??
Мне нужен инструмент для составления списка сборок и встроенных библиотек DLL, загруженных в процесс, получения размера образов в процессе и для каждой сборки измерения объема памяти, используемого JIT-методами.
ListDllsот SysInternal частично выполняет эту работу. Но он не измеряет размер JIT-кода, а просто предоставляет необработанные данные. В идеале я хотел бы, чтобы пользовательский интерфейс анализировал и суммировал эти данные.
Недавно команда Visual Studio сообщила о проведении такого анализа с помощью инструмента PerfView. Об этом говорится в сообщении блога Visual Studio 11 Beta Performance Part #1, раздел: The Biggest VM Consumer — DLLs. Есть ли у кого-нибудь опыт и отзывы по анализу собственных библиотек DLL и сборок с помощью PerfView?
Кроме ListDllsи PerfViewпорекомендуете ли вы какой-либо другой инструмент?
Хорошо, VMMAP, рекомендованный Саймоном Мурье, кажется более подходящим инструментом для этой задачи. VMMAP показывает, что большая часть памяти рабочего набора уходит в управляемый стек (113 МБ, выделено зеленым ниже), поэтому проблема больше связана с .NET, чем неуправляемая память. Зеленая зубчатая кривая — это просто временная шкала сеансов загрузки/выгрузки. По некоторым причинам мои первые измерения были совершенно неправильными:
Итак, мой план: