mario.deghetto

Visual Basic & .NET
posts - 187, comments - 41, trackbacks - 0

DotNetWork

 

My Links

News



Microsoft MVP - Visual Basic My MVP Profile

Le basi di dati spiegate a mia nonna
SQL Server 2008 Guida all'uso
Visual C# 2008 spiegato a mia nonna
Visual Basic 2008 spiegato a mia nonna


(dal 1° Ottobre 2009)



Archivi

#55: [VB.NET] Misurare il tempo di esecuzione

Spesso ci capita di conoscere varie tecniche per risolvere un nostro problema applicativo e/o di programmazione e non sappiamo quali di queste tecniche è più efficace dal punto di vista delle prestazioni, cioè quale impiega meno tempo a terminare l’esecuzione.

Le prestazioni di diversi algoritmi, talvolta, hanno una piccola differenza di tempo nell’esecuzione di singoli passi di programma, ma se moltiplichiamo la differenza di tempo per centinaia di migliaia di elementi da elaborare, il tempo totale diventa percepibile in modo pesante dall’utente. E’ quindi necessario sperimentare i vari algoritmi o frammenti di codice per verificare quale sia preferibile tra le varie possibilità.

Un modo semplice è quello di utilizzare un oggetto di classe TimeSpan, rilevando i “ticks” all’inizio del frammento di codice e alla fine del frammento, calcolando poi la differenza tra le due registrazioni.

I “tick” sono le più piccole unità di tempo in .NET, equivalenti a 100 nanosecondi.

Per esempio:

' ... 
' prima registrazione
Dim ts1 As New TimeSpan(Now.Ticks)
' frammento di codice o ciclo da valutare
' ...
' registrazione finale e visualizzazione della differenza di tempo
Dim ts2 As New TimeSpan(Now.Ticks)
MessageBox.Show((ts2 - ts1).ToString)
' ... 

 

Un metodo alternativo e anche più appropriato è il seguente

Dim ts1 As long = Environment.TickCount
…
MessageBox.Show((Environment.TickCount – ts1).ToString)

 

E’ una versione più appropriata, in quanto utilizza Environment che fa parte del Framework .NET, al posto della funzione Now che deriva dal vecchio VB6.

In questo modo sarà possibile esaminare i tempi di diversi algoritmi ed effettuare così la scelta del migliore, nel caso preso in esame.

Attenzione: non è un metodo che permette di effettuare dei veri e propri benchmark, perché i tempi di esecuzione spesso dipendono da molti altri fattori. Per esempio servizi e programmi attivi, disponibilità di RAM nel momento dell’esecuzione, carico del processore e così via. In ogni caso, il metodo proposto è un metodo empirico sufficientemente significativo e soprattutto semplice per fare delle valutazioni “a spanne” ma con dei dati alla mano. Per un migliore risultato e una maggiore sicurezza delle misurazioni è consigliabile ripetere la misurazione più volte.

Print | posted on domenica 14 febbraio 2010 5.34 |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 3 and 3 and type the answer here:

Powered by: