Pregunta

Necesito hacer algunas pruebas de rendimiento en los programas .NET (C #) en Windows, pero no he hecho mucho en el mundo de Windows. He investigado el uso del monitor de rendimiento de Windows 2000 / XP con contadores personalizados para esto, pero no creo que esto sea exactamente lo que quiero.

¿Existe alguna buena instalación de sistema para esto en Windows XP, o solo necesito usar System.Diagnostics.Stopwatch [edit] y escribir registros de texto para interpretación manual, o hay algo más?

Editar: ¿hay algo más allá de System.Diagnostics.Stopwatch ?

¿Fue útil?

Solución

Para la micro-evaluación comparativa me gusta MeasureIt (se puede descargar desde http: //msdn.microsoft.com/en-us/magazine/cc500596.aspx ). Es un proyecto de prueba escrito por Vance Morrison, un Arquitecto de Performance en el CLR. Actualmente tiene un buen conjunto de puntos de referencia para varios métodos principales de .Net / CLR. Lo mejor de todo es que es trivial modificar y agregar nuevos puntos de referencia para lo que quiera probar. Simplemente ejecute " MeasureIt / edit " y lanzará VS con el proyecto por sí mismo para que pueda ver cómo se escriben esos puntos de referencia y agregar otros nuevos de manera similar si lo desea.

Como ya se ha dicho, StopWatch es probablemente la forma más fácil de hacer esto y MeasureIt usa StopWatch debajo de sus tiempos, pero también hace otras cosas como ejecutar un bloque de código X veces y luego proporcionarle estadísticas para las ejecuciones y lo que no. .

Otros consejos

using System.Diagnostics;
....

Stopwatch sw = new Stopwatch();

sw.Start();

// Code you want to time...

// Note: for averaged accuracy (without other OS effects), 
//       run timed code multiple times in a loop 
//       and then divide by the number of runs.

sw.Stop();

Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks");

Si solo desea algunos números rápidos, puede usar Powershell para cronometrar la ejecución general. Use el cmdlet measure-command. Es aproximadamente equivalente a " tiempo " en unix

> measure-command { your.exe arg1 }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 996
Ticks             : 49963029
TotalDays         : 5.78275798611111E-05
TotalHours        : 0.00138786191666667
TotalMinutes      : 0.083271715
TotalSeconds      : 4.9963029
TotalMilliseconds : 4996.3029

Hay bastantes perfiladores por ahí. Éstos son algunos de los que conozco:

Si continúas usando System.Diagnostics.Stopwatch, podrás instrumentar y medir solo puntos particulares de tu código, donde pones el Start / Stop explícitamente. Esto es lo suficientemente bueno para medir piezas específicas, como un circuito cerrado o cosas así, pero no te dará una imagen completa de dónde pasa tu programa la mayor parte del tiempo.

Puede que esto no sea lo que desea, pero dotTrace ofrece muchos diagnósticos útiles y está integrado en Visual Studio.

Si su proyecto es bastante grande y hay muchos módulos que hacen un gran número de llamadas, puede: http://www.moduleanalyzer.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top