DateTime.Now-bugg i .net 4.0 beta 1

När jag satt och förberedde mitt inlägg om indexera dina kollektioner i c# för bättre prestanda så provade jag med flera versioner av .net, bland annat 2.0, 3.5 och 4.0 beta 1. Jag märke då direkt att .net 4.0 beta 1 var mycket långsammare än 2.0 och 3.5. Efter en del grävande kom jag fram till att det var DateTime.Now som tog mycket längre tid i .net 4.0 beta 1 än de andra versionerna. Det visade sig att nedanstående kod tog 4ms med .net 3.5 och 18ms med .net 4.0 beta 1.

Kodexempel för att reproducera problemet.
for (int i = 0; i < 10000; i++) { DateTime date = DateTime.Now; }[/sourcecode] Jag kontaktade därför de som jobbar med prestanda för .net-ramverket och fick då bekräftat att det var en bugg. Det skall fixas i och med beta 2. Jag vill samtidigt passa på att tipsa om att DateTime.UtcNow är många gånger snabbare än DateTime.Now. Som exempel där jag hämtar tiden 10000 gånger (mitt exempel ovan) så ser det ut på följande sätt. DateTime.UtcNow: 0,2ms DateTime.Now: 4,5ms Detta beror på att när man anropar .Now så måste den beräkna om tiden till rätt tidszon och avgöra om det är sommartid/vintertid.

Kommentarer inaktiverade.

%d bloggare gillar detta: