onsdag 22 augusti 2007

ClassMate 2 (Stopwatch)

Denna gång ska jag tjata om vikten av att använda rätt klasser till rätt saker. Vi tar klassen StopWatch, som namnet antyder så är det ett tidtagarur. Bra att använda när man vill klocka delar av sin kod eller funktioner som man tror tar för lång tid. Du hittar StopWatch klassen i System.Diagnostics. Det jag sett att många gör när de vill ta tid i sin kod är att spara undan 2 stycken objekt av typen System.DateTime som innehåller DateTime.Now() och sedan räkna ut resultattiden.
T ex så här:

System.DateTime startTime = System.DateTime.Now;
//Do some time consuming stuff here...
System.DateTime stopTime = System.DateTime.Now;
//Calculate the difference.
System.TimeSpan elapsedTimeSpan = stopTime.Subtract(stopTime);
double elapsedSeconds = elapsedTimeSpan.TotalSeconds;


Varför??? Det finns ju en klass som gör allt det där åt dig. Samma exempel med StopWatch klassen.

Stopwatch objStopWatch = new Stopwatch();
objStopWatch.Start();
//Do some time consuming stuff...
objStopWatch.Stop();
double elapsedSeconds = objStopWatch.Elapsed.TotalSeconds;


Ok! Jag vet vad ni tänker nu. Smartass! Det är ju bara 1 kodrad mindre. Jo!! men det är inte det som är poängen. Det sista exemplet är mycket elegantare och tydligare att läsa och förstå. Man ser direkt vart tidtagningen startar och slutar. Man bör göra allt man kan för att skriva kod som inte är "write only". Nu kanske detta exempel inte var så komplicerat, men en annan kanske viktigare punkt. Det skapas bara 2 objekt instanser för GarbageCollectorn att hålla reda på och rensa upp, istället för 4 objekt som i det första exemplet. Färre objekt instanser = snabbare exekvering av kod.

Inga kommentarer: