2013-06-21 4 views
1

Я ищу эквивалент java -verbose:gc или любой инструмент или фрагмент кода, чтобы получить ту же информацию. В идеале, это было бы чем-то, что я мог бы запускать без присмотра в службе и записывать все в файл. Мой вариант использования - профилирование задержки, вызванной GC, в долгосрочной перспективе.Как вы регистрируете все события сбора мусора в CLR/.Net?

+0

PerfView от Microsoft может предоставить эту информацию. –

ответ

3

Для неинвазивного профилирования .NET GC у вас есть несколько вариантов. Вы можете использовать CLR Memory Performance Counters или CLR Memory Event Tracing или некоторый профилировщик (профилировщик памяти SciTech имеет хороший инструмент командной строки, который позволяет вам собирать данные профилирования CLR в рабочей среде - другие профили .NET, вероятно, также раскрывают такую ​​функцию).

Я полагаю, что счетчики Performance является наименее инвазивным методом, но они не дают вам подробную информацию о GC работе - хотя вы можете видеть, сколько коллекций были выполнены (в каждом поколении), а также, сколько время, потраченное на GC. Для того, чтобы собрать эту информацию, вы можете использовать, системный монитор команду Typeperf или Powershell (я когда-то описал различные способы использования PErF счетчиков, так что вы можете иметь вид: http://lowleveldesign.wordpress.com/2012/04/19/diagnosing-applications-using-performance-counters/)

ETW событие обеспечивает гораздо более подробную информацию о GC внутренних работах. Вы можете настроить поставщика ETW вручную (например, с помощью logman или xperf) или использовать отличный инструмент PerfView (как @Marc указал в комментарии). Если вы заинтересованы только в GC событий, проверить GC Only флажок в Collect окна:

enter image description here

Существует большой эпизод Defrag Tools посвященный CLR GC профилирование (часть 4): http://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-36-CLR-GC-Part-4, я также рекомендую вам проверка других частей, а также чтение документации PerfView. PerfView - действительно мощный инструмент, и он даже позволяет анализировать .NET Heap и сравнивать снимки памяти.

Последний вариант (который использует профайлер памяти), вероятно, является наиболее агрессивным из трех методов, но иногда может дать вам еще более подробную информацию о GC кучах (особенно, когда вы хотели бы проанализировать графики объектов) , Я не могу придумать какой-либо хороший бесплатный GC Memory Profiler, поэтому, вероятно, вам нужно будет заплатить, чтобы получить один из этих инструментов. У меня есть опыт работы с SciTech Memory Profiler (это довольно хорошо, и, как я уже упоминал ранее, у них есть a command line client, что позволяет собирать данные о производстве). Я также пробовал профиль Visual Studio Memory - это неплохо, но менее мощный, чем SciTech, и, наконец, JetBrains и RedGate также продают профилировщики памяти, которые хорошо известны среди разработчиков .NET и, вероятно, сопоставимы с SciTech.

+0

Я довольно новичок в разработке Windows, так что это действительно полезная информация! – Ramon

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

  • Нет связанных вопросов^_^