Testare il tempo di esecuzione degli algoritmi in C#

dotnetVediamo in questo breve articolo come testare le performance dei nostri algoritmi scritti in C#. Il metodo risolutivo è assolutamente analogo a quanto accade in JAVA: occorre calcolare il tempo corrente in nanosecondi proveniente dal clock di sistema, eseguire l’algoritmo e subito dopo eseguire la differenza dal tempo corrente a quello precedentemente calcolato. Ovviamente nel frattempo è passato un certo tempo per via dell’algoritmo che abbiamo posizionato tra i due calcoli.

Il concetto è più lungo a dirsi che a farsi, ecco il codice:

long time = DateTime.Now.Ticks;

for (int i = 0; i < 100000000; i++)

{

//non fa nulla

}

Console.WriteLine("Tempo trascorso: " + (new TimeSpan(DateTime.Now.Ticks - time).TotalMilliseconds) + " ms");

Come possiamo notare, C# non ci mette a disposizione una precisione superiore al millisecondo. Per ovviare a questo problema, occorre implementarsi da soli apposite classi che leggano direttamente dal processore il timestamp. Qualcuno lo ha già fatto per noi e potete trovare la classe DateTimePrecise su CodeProject molto utile allo scopo. Buon lavoro! ok emoticon

This entry was posted in Linguaggi .Net, Programmazione and tagged , , , , , , , , , , , . Bookmark the permalink.

2 Responses to Testare il tempo di esecuzione degli algoritmi in C#

  1. nioadminer says:

    Ciao a tutti!

    Innanzitutto faccio i complimenti a Denis per il blog; l’ho scoperto da poco, ma da quanto ho visto finora, è ben fatto e contiene informazioni molto utili. E poi è stato utilizzato WordPress! Anche io ho deciso di affidarmi a questa piattaforma per realizzare un blog, il primo in assoluto per me; per ora sto raccogliendo un po’ di idee per quanto riguarda l’aspetto grafico, e in queste pagine ce ne sono wink emoticon

    Chiedo scusa per questa breve digressione e vengo al dunque.

    A partire dal .NET Framework 2.0, nel namespace System.Diagnostics, è presente la classe Stopwatch che fornisce metodi e proprietà che possono essere utilizzati per misurare con precisione il tempo trascorso.
    Di seguito ho postato il caso più semplice possibile di utilizzo:

    {

    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();

    /* RUN */

    stopwatch.Stop();

    Console.WriteLine(“Tempo trascorso: ” + stopwatch.Elapsed.ToString());

    }

    Per un approfondimento alla classe, rimando alle MSDN.
    Buon Lavoro!

  2. Denis says:

    Ciao nioadminer e grazie per la tua visita e soprattutto per i complimenti! Non preoccuparti per la digressione, spero che quel poco che ho scritto sia utile wink emoticon Ho visto la tua soluzione e devo dire che è molto interessante, non conoscevo l’oggetto Stopwatch ma credo possa essere molto utile in certe occasioni ed in un mondo totalmente a oggetti come in C# devo dire che mi sorprendeva la mancanza di un oggetto simile. Ora che lo conosco voglio testarlo in qualche algoritmo dedicato tongue emoticon

    Grazie mille e torna a trovarmi, a presto
    Denis ok emoticon

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>