2012-08-03 5 views
1

Попытка сделать до/после сравнения 2 версии того же приложения .net 3.5, я получаю несогласованные результаты, в зависимости от того, что инструмент, который я использую.Несоответствие между отчетами типаperf и всеми другими инструментами (mem profiler, process explorer, full dump)

Typeperf - который я думаю, что было бы авторитетным - говорит:

  • v1: 244MB/260MB (частные байт/рабочий набор)
  • v2: 281MB/296MB

Проводник процесса показывает эти рисунки в графике производительности:

  • v1: 283MB (частный байт)
  • v2: 262MB

Так Typeperf говорит v2 получил больше памяти голодным, Process Explorer утверждает обратное.

Это все отдельные измерения и разные прогоны, но цифры воспроизводятся удивительно надежно.

В дополнение к 2 вышеупомянутых инструментов, я также взял полный дамп памяти из Process Explorer, и смотрит только на размеры файлов (не было времени, чтобы WinDbg или иным образом анализировать их пока):

  • v1: 484MB (полный дамп размер файла)
  • v2: 480MB

Кроме того, при запуске приложения из .net Memory Profiler, как родной памяти,. чистая память, а также общая память ниже в v2, чем в v1.

Похоже, что это типperf против остального мира (анализ WinDbg все еще выдающийся).

Кто прав, и откуда я знаю?

ответ

1

У меня есть хорошая идея, в чем проблема: В моих тестах я не дал GC достаточно времени для выполнения своей работы.

  • v1 создал мусор и все ссылки на него (-> утечки памяти), так что не было ничего, чтобы очистить
  • но v2 создал мусор и выпустил ссылки.

При принятии полного дампа или при использовании профилировщика памяти ГХ будет работать (в последнем случае я знаю, что на самом деле, в первом случае я предполагаю, что, основываясь на частных байтов капельной значительно при сбросе)

Это объясняет это для меня.