2012-03-23 2 views
1

Легко отобразить текущий% в GC в приложении .NET, но как вы можете показать среднее время в GC или время события в GC, чтобы вы могли пройти полный сценарий и измерить, если вы действительно улучшили ситуацию?Среднее время в GC

% времени в GC определяется как:.

«% времени в GC Показывает процент времени, которое было потрачено выполняя сбор мусора, так как цикл сбора последний мусора Этот счетчик обычно указывает на работу, проделанную сборщик мусора для сбора и сжатия памяти от имени приложения. Этот счетчик обновляется только в конце каждой коллекции мусора. Этот счетчик не является средним, его значение отражает последнее наблюдаемое значение ».

ответ

2

Если вы заинтересованы в измерении прошедшего времени в GC, эти данные доступны через ETW. PerfMonitor будет собирать и отображать эти данные для вас - ознакомьтесь с этой статьей журнала MSDN для введения: http://msdn.microsoft.com/en-us/magazine/gg490356.aspx.

2

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

Более простой подход - и, если честно, гораздо более надежный - это рассчитать количество объектов, которые вы создаете в определенном методе. Лучшие практики, такие как создание объекта в цикле и т. Д., Помогут.

+1

Согласованный единственный разумный вариант - дать ему меньше «мусора» для сбора. –

1

Некоторые версии Visual Studio имеют встроенный профайлер. Существуют также сторонние профилировщики, бесплатные и те, которые стоят денег. Профилист может показать вам, какой процент времени вы тратите на GC.

EDIT Есть некоторые распространенные заблуждения относительно времени процессора, затраченного на любой старый поток, включая поток GC. Например, можно заблокировать объект синхронизации, который использует поток GC. В этом случае GC будет находиться в режиме ожидания, но не будет поддаваться измеримому количеству процессорного времени. Эти сценарии трудно проверить без правильной оснастки.

+0

На самом деле мне нужно общее время. Process Explorer показывает вам% времени в GC, а не общее время :( – pablo

+0

@pablo. Посмотрите мои правки. Вы можете заметить, что VS Profiler гораздо приятнее работать с API-интерфейсами Windows напрямую. – GregC

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