Инструменты для анализа объема памяти собственных библиотек DLL и сборок, загруженных в процесс?

У меня есть процесс, занимающий 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, рекомендованный Саймоном Мурье, кажется более подходящим инструментом для этой задачи. enter image description hereVMMAP показывает, что большая часть памяти рабочего набора уходит в управляемый стек (113 МБ, выделено зеленым ниже), поэтому проблема больше связана с .NET, чем неуправляемая память. Зеленая зубчатая кривая — это просто временная шкала сеансов загрузки/выгрузки. По некоторым причинам мои первые измерения были совершенно неправильными:

  • dotTrace сообщает мне, что у меня выделено 41 МБ объектов .NET,
  • WMMAP показывает рабочий набор 180 МБ (диспетчер задач показывает аналогичное число)
  • WMMAP показывает 113 МБ управляемой кучи, выделенной сборщиком мусора. 90 МБ памяти этой управляемой кучи находится в рабочем наборе:

Итак, мой план:

  1. Выяснить, почему сборщик мусора выделяет 113 МБ управляемой кучи для 41 МБ объектов .NET? (нормальны ли такие цифры? это из-за высокой фрагментации?)
  2. Работайте над сокращением этого 41 МБ набора выделенных объектов .NET!

13
задан Patrick from NDepend team 26 March 2012 в 10:41
поделиться