RicH and FamouS

       Home         Glosar IT                                                                                                                                                                                                              SUBSCRIBE NOW!
        

11.04.2009

Stopwatch

Clasa Stopwatch (desinita in System.Diagnostics) ne da o serie de instrumente cu o foarte buna acuratete de masurare a timpului dintre doua evenimente.

Odata creata o instantza a aceste clase: Stopwatch t = new Stopwatch(); (constructor fara parametri) se pot apela metodele de pornire si, respectiv, oprire a "cronometrului" - Start() si Stop().

t.Start() - porneste cronometrul, iar
t.Stop() il opreste!

In acest moment se poate apela una dinre proprietatile ElapsedTicks sau ElapsedMilliseconds - proprietati (readonly) care returneaza intervalul de timp dintre apelarea metodelor Start() si Stop(), in ticks sau milisecunde.

Simplu si frumos!

Acum sa vedem aceasta clasa la treaba intr-un scurt exemplu.

V-ati intrebat vre-odata ce e mai eficient (rapid) sa folositi: for sau while? Contor ascendent sau descendent? Folosind clasa StopWatch o sa incercam sa vedem ce se executa mai repede:

Cod:
using System;
using System.Diagnostics;

namespace Stopwatch_tests
{
class Program
{
static void Main(string[] args)
{
int i;
Stopwatch t = new Stopwatch();
t.Start();
for (i = 0; i < 10000000; i++) //ciclu for ascendent
{

}
t.Stop();
Console.WriteLine("ascending for:");
Console.WriteLine("ticks: " + t.ElapsedTicks);
Console.WriteLine("milisec: " + t.ElapsedMilliseconds);
Console.WriteLine("nn");

t.Reset();
t.Start();
for (i = 10000000; i > 0; i--) //ciclu for descendent
{

}
t.Stop();
Console.WriteLine("descending for:");
Console.WriteLine("ticks: " + t.ElapsedTicks);
Console.WriteLine("milisec: " + t.ElapsedMilliseconds);
Console.WriteLine("nn");

t.Reset();
t.Start();
i = 10000000;
while (i > 0) //ciclu while ascendent
{
i--;
}
t.Stop();
Console.WriteLine("descending while:");
Console.WriteLine("ticks: " + t.ElapsedTicks);
Console.WriteLine("milisec: " + t.ElapsedMilliseconds);
Console.WriteLine("nn");

t.Reset();
t.Start();
i = 0;
while (i < 10000000) //ciclu while descendent
{
i++;
}
t.Stop();
Console.WriteLine("ascending while:");
Console.WriteLine("ticks: " + t.ElapsedTicks);
Console.WriteLine("milisec: " + t.ElapsedMilliseconds);
Console.WriteLine("nn");

Console.ReadKey();
}
}
}

La mine pe calcularor rezultatele arata cam asa:

''

ascending for:
ticks: 124439475
milisec: 40

descending for:
ticks: 89507722
milisec: 29

descending while:
ticks: 97489147
milisec: 31

ascending while:
ticks: 111771330
milisec: 36

''

De unde pot sa trag concluzia ca for cu contor descrescator este cea mai rapida modalitate de a executa un ciclu!

    Blog din Moldova    FastCounter 

 
Copyright © 2008-2010 Foster1. All rights reserved.