2008-12-17 7 views
5

En este momento sólo tiene que utilizar algo como esto¿Cómo se mide bloque de código (rosca) el tiempo de ejecución con múltiples subprocesos simultáneos en .NET

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

que funciona muy bien para los métodos síncronos, pero algunos están ejecutando de forma asíncrona, por lo el tiempo está sesgado cuando se están ejecutando varios hilos. ¿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(), entonces si el Método1() y el Método2() comienzan al mismo tiempo y el Método1 termina en la marca de 2 segundos y el Método2 termina en el 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 (Suponiendo que durante los primeros 2 segundos compartieron el procesador (supuesto núcleo único) igualmente.

+0

¿Usted está pidiendo tiempo de procesador dedicado en el método() en función del tiempo transcurrido en general, ya otros hilos están utilizando la CPU mientras que el método() se está ejecutando? ¿O está el método() comenzando algunas cosas de sincronización y quieres capturar ese tiempo como parte del tiempo transcurrido? –

+0

El primero. Editado para aclarar – Davy8

Respuesta

1

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

Alternativamente (p referida opción 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 un montón de información en la web, puede empezar con MSDN: http://msdn.microsoft.com/en-us/library/w8f5kw2e(VS.71).aspx

+0

El cronómetro mide el tiempo real transcurrido que podría no emplearse en la ejecución del hilo actual. Estamos creando una nueva instancia para cada hilo, pero no obtiene lo que queremos. – Davy8

1

una vez resuelto un problema similar creando un envoltorio para cronómetro que tenía una instancia cronómetro marcado como ThreadStatic.

Alternativamente, hay herramientas como Ants Profiler que puede comprar para ayudarlo.

Cuestiones relacionadas