Mät mer noggrant med Stopwatch

Stopwatchklassen i .net används – precis som namnet antyder – som ett stoppur. Man startar uret och kan sedan när som helst stoppa det. Vid ett senare tillfälle kan man kontrollera hur lång tid som hann gå. Stopwatch är enklare och mer exakt än att jämföra två DateTime.

De mätvärden man kan få som standard från stopwatch är bland annat Elapsed som returnerar en TimeSpan och ElapsedMilliseconds som returnerar en Long.

Exempel på hur det kan användas är följande.

Stopwatch sw = new Stopwatch();
sw.Start();
Response.Write(String.Format("Testar stopwatch {0}", "nu."));
sw.Stop();

Response.Write("Antal millisekunder: " + sw.ElapsedMilliseconds);

Problemet är att ovanstående kod ger 0ms. Det betyder givetvis inte att det inte tog någon tid alls att skriva ut den sträng utan helt enkelt att Stopwatch avrundar till närmsta millisekund.

Ibland kan det finnas behov av att mäta på en mer noggrann nivå och då kan man använda ElapsedTicks tillsammans med Stopwatch.Frequency för att få fler decimaler.

Det kan exempelvis se ut på följande sätt.

Stopwatch sw = new Stopwatch();
sw.Start();
Response.Write(String.Format("Testar stopwatch {0}", "nu."));
sw.Stop();

Response.Write("Antal millisekunder: " + (double)sw.ElapsedTicks * 1000.0 / (double)Stopwatch.Frequency);

Nu visar utskriften att det tar 0,00466610517867683ms att göra en Response.Write med String.Format.

ElapsedTicks är den minsta enheten som Stopwatch klarar av och Stopwatch.Frequency innehåller information om hur många ticks det går på en sekund.

Kommentarer inaktiverade.

%d bloggare gillar detta: