2010-10-14 10 views
6

Estoy escribiendo una aplicación ASP.NET MVC y estoy viendo un rendimiento aparentemente aleatorio de una de mis acciones. Mi conclusión inicial es que la recolección de basura se está iniciando y pausando la aplicación por un tiempo, pero parece que no puedo encontrar un botón/interruptor que demuestre o desmienta mi teoría.¿Cuál es el equivalente de .NET de la opción de línea de comandos de jave -verbose: gc

Para ninguna persona de Java por ahí -verbose:gc es un modificador de línea de comandos que puede pasar a una aplicación java que hará que la JVM imprima cuando ocurre un evento de GC y cuánto tiempo lleva.

He intentado usar la herramienta de rendimiento vs2010 y JetBrains dotTrace, que son un poco como usar un arma termo nuclear para romper una tuerca pequeña.

+0

cuánto tiempo la GC toma no se define tan fácilmente. La mayoría de los GC no requieren un programa detenido, ya que .net usa un GC concurrente en las aplicaciones cliente. – CodesInChaos

Respuesta

6

En .NET 4.0 hay un seguimiento de eventos para Windows (ETW) que le proporciona la información que está buscando. Aquí hay uno específico para GC.

FYI ETW es muy rápido y está integrado en Kernel. Con ETW usted debe ser capaz de obtener este tipo de información alt text

alt text

Y para conseguir esta información no es una herramienta del equipo BCL que se llama PerfMonitor

Estos son los pasos en el uso de la herramienta para obtener la información GC

  1. Iniciar un cmd o PowerShell como administrador , esto requería para recoger ETW rastreo
  2. de inicio de la aplicación que desea rastrear
  3. Emita el comando “PerfMonitor.exe /proceso: inicio de 4180”, donde 4180 es el identificador de proceso
  4. hacer las acciones necesarias
  5. Entonces tema “PerfMonitor .exe stop "
  6. El comando para obtener el informe " PerfMonitor.exe GCTime ". Esto generar un informe y abrirlo en el navegador

tengo también blogged al menos el mismo

HTH

+0

Eso es aún mejor ... ta. –

0

Su primera conjetura no debería ser el GC. Con todas las cargas de trabajo normales, no observa el GC en .NET.

No hay traza-interruptor para el GC, pero puede mirar el performance counters si todavía cree que el GC tiene la culpa.

+0

Gracias que hace el trabajo. Tienes toda la razón, no es nada complicado con GC, no podría ser fácil :-) –

Cuestiones relacionadas