c# .net performance multithreading measurement

c# - ¿Cómo se mide el tiempo de ejecución del bloque de código(subproceso) con múltiples subprocesos concurrentes en.NET



performance multithreading (4)

En este momento solo usamos algo como esto

stopWatch.Start(); try { method(); } finally { stopWatch.Stop(); }

Lo cual funciona bien para los métodos síncronos, pero algunos se están ejecutando de forma asíncrona, por lo que la hora está sesgada cuando se están ejecutando varios subprocesos. ¿Hay un equivalente a System.Diagnostics.Stopwatch que medirá solo el tiempo gastado en el hilo actual?

Queremos recopilar datos durante un período prolongado de tiempo en nuestra versión beta (alfa?) Interna, y ejecutar en un perfilador de tiempo completo no es una opción viable.

Editar: Para aclarar, solo queremos medir el tiempo empleado en ejecutar el método (), así que si Método1 () y Método2 () comienzan al mismo tiempo y Método1 termina en la marca de 2 segundos y Método2 termina en la marca de 4 segundos, Quiero algo que me diga que Method1 pasó aproximadamente 1 segundo ejecutándose y Method2 pasó aproximadamente 3 segundos ejecutándose (asumiendo que durante los primeros 2 segundos compartieron el procesador (supuesto núcleo único) por igual.


El cronómetro debería medir el tiempo que se pasa solo en un hilo. Necesitarías ejecutar una instancia separada en cada hilo. Esto le daría probablemente los resultados más cercanos a lo que desea.

Alternativamente (opción preferida si desea monitorear toda la aplicación, y no solo algunos métodos), hay varios contadores de rendimiento que puede usar de fábrica (se actualizan con el tiempo de ejecución de .Net). Hay mucha información en la web, puede comenzar con msdn: http://msdn.microsoft.com/en-us/library/w8f5kw2e(VS.71).aspx


Una vez resolví un problema similar al crear un contenedor para StopWatch que tenía una instancia de ThreadStatic marcada como ThreadStatic .

Alternativamente, hay herramientas como Ants Profiler que puedes comprar para ayudarte.