Qual é a melhor maneira de programas de benchmark no Windows?
-
02-07-2019 - |
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
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/