Pergunta

Eu preciso fazer alguns benchmarks de desempenho em programas .NET (C #) no Windows, mas eu não fiz análise comparativa muito no mundo Windows. Eu olhei para usando o monitor / XP de desempenho do Windows 2000 com contadores personalizados para isso, mas eu não acho que isso é exatamente o que eu quero.

Existem quaisquer instalações do sistema de bom para isso no Windows XP, ou eu preciso usar apenas System.Diagnostics.Stopwatch [editar] e logs de texto de gravação para interpretação manual ou há algo mais?

Edit:? Há nada além System.Diagnostics.Stopwatch

Foi útil?

Solução

Para micro-benchmark eu realmente gosto MeasureIt (pode ser descarregado a partir http: //msdn.microsoft.com/en-us/magazine/cc500596.aspx ). É um projeto de teste escrito por Vance Morrison um arquiteto de Desempenho no CLR. Atualmente tem um bom conjunto de valores de referência para uma série de métodos fundamentais .Net / CLR. A melhor parte é que é trivial para ajustar e adicionar novos valores de referência para o que você gostaria de testar. Basta executar "MeasureIt / editar" e que vai lançar VS com o projeto por si mesmo para que você possa ver como esses benchmarks são escritos e adicionar novas de uma forma similar, se quiser.

Como já foi dito StopWatch é provavelmente a maneira mais fácil de fazer isso e MeasureIt usa StopWatch debaixo de suas temporizações mas também faz algumas outras coisas como correr um bloco de vezes código X e, em seguida, fornecendo-lhe estatísticas para as corridas e não o que .

Outras dicas

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");

Se você quiser apenas alguns números rápida, você pode usar o PowerShell para execução global do tempo. Use o cmdlet medida de comando. É equivalente a "tempo" em 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

Existem muito poucos profilers lá fora. Aqui estão algumas das que eu conheço:

Se você continuar com usando System.Diagnostics.Stopwatch, você será capaz de instrumento e medir pontos única particulares de seu código, onde você coloca explicitamente o Start / Stop redor. Isso é bom o suficiente para medir peças específicas, como um laço apertado ou coisas assim, mas não vai dar-lhe uma visão completa de onde o programa passa a maior parte de seu tempo.

Este não pode ser o que quiser, mas dotTrace oferece muitas diagnóstico úteis e é integrado Visual Studio.

Se o seu projeto é muito grande e existem muitos módulos que fazem grande número de chamadas que você pode o seu: http://www.moduleanalyzer.com/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top