Domanda

Devo fare alcuni benchmark delle prestazioni sui programmi .NET (C #) in Windows, ma non ho fatto benchmark molto nel mondo Windows. Ho esaminato l'utilizzo del monitor delle prestazioni di Windows 2000 / XP con contatori personalizzati per questo, ma non penso che sia esattamente quello che voglio.

Esistono buone strutture di sistema per questo in Windows XP o devo semplicemente usare System.Diagnostics.Stopwatch [modifica] e scrivere registri di testo per l'interpretazione manuale, o c'è qualcos'altro?

Modifica: c'è qualcosa oltre System.Diagnostics.Stopwatch ?

È stato utile?

Soluzione

Per il micro-benchmarking mi piace molto MeasureIt (può essere scaricato da http: //msdn.microsoft.com/en-us/magazine/cc500596.aspx ). È un progetto di test scritto da Vance Morrison un Performance Architect sul CLR. Attualmente ha una buona serie di parametri di riferimento per una serie di metodi di base .Net / CLR. La parte migliore è che è banale modificare e aggiungere nuovi parametri di riferimento per qualsiasi cosa tu voglia testare. Esegui semplicemente " MeasureIt / edit " e avvierà VS con il progetto per se stesso in modo che tu possa vedere come sono scritti quei benchmark e aggiungerne di nuovi in ??modo simile se vuoi.

Come già detto, StopWatch è probabilmente il modo più semplice per farlo e MeasureIt utilizza StopWatch per i suoi tempi, ma fa anche altre cose come eseguire un blocco di codice X volte e quindi fornire statistiche per le corse e cosa no .

Altri suggerimenti

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 si desidera solo alcuni numeri rapidi, è possibile utilizzare Powershell per programmare l'esecuzione complessiva. Utilizzare il cmdlet measure-command. È approssimativamente equivalente a "tempo" in 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

Ci sono parecchi profiler là fuori. Ecco alcuni di quelli che conosco:

Se continui a utilizzare System.Diagnostics.Stopwatch, sarai in grado di strumentare e misurare solo punti particolari del tuo codice, in cui metti esplicitamente Start / Stop. Questo è abbastanza buono per misurare pezzi specifici, come un circuito stretto o cose del genere, ma non ti darà un quadro completo di dove il tuo programma trascorre la maggior parte del suo tempo.

Questo potrebbe non essere quello che desideri, ma dotTrace offre molti utili strumenti diagnostici ed è integrato in Visual Studio.

Se il tuo progetto è piuttosto grande e ci sono molti moduli che fanno un gran numero di chiamate puoi: http://www.moduleanalyzer.com/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top