2010-01-08 7 views
18

¿.NET tiene algo similar al registro de recolección de basura de Java? Quiero escribir estadísticas de GC en un registro en una aplicación de producción. Google no dice nada útil y SO tampoco parece tener preguntas relacionadas.¿.NET tiene algo similar al registro de recolección de basura de Java?

Gracias

+0

Además, necesito estos registros generados en las máquinas de mi cliente. De vez en cuando recopilaré los registros y analizaré el rendimiento del GC (cuando se ejecutó gc, cuántos milisegundos tomó, no hay mucha más información que eso) – Shahbaz

Respuesta

6

estadísticas GC están disponibles como contadores de rendimiento. En Perfmon se muestran en la categoría ".NET CLR Memory". Puede acceder a los contadores de rendimiento mediante programación a través del espacio de nombres System.Diagnostics (las clases PerformanceCounterXxx) o usar Server Explorer para crear contenedores útiles.

Tenga en cuenta que estas son estadísticas y no proporcionan un registro detallado por objeto.

3

Cuando las estadísticas de perf le dicen que hay un problema, puede sumergirse con un depurador (windbg) para encontrar fugas. El comando! GCRoot le permite averiguar por qué la memoria no se está recopilando. Consulte this blogpost para obtener más información

0

Puede configurar un cierto nivel de registro de GC usted mismo usando Garbage Collection Notifications. Pero tenga en cuenta que si usa ConcurrentGC, que sería típico de las aplicaciones del lado del servidor, solo recibirá notificaciones para los GC del mundo. Por lo tanto, no es tan completo como el equivalente de Java, pero es algo.

También hay un poco de información relacionada con GC disponible a través del registro de ETW. Probablemente sea posible conectar su propio oyente ETW y extraer información de esa manera, pero no conozco un método precocido para hacerlo.

Cuestiones relacionadas