Performance von DateTime.TryParseExact


Ich habe in der letzten Woche ein kleines Tool zum Auswerten von Logdateien geschrieben und hier benötigte ich dringend die Möglichkeit ein bestimmtes Datum zu parsen damit ich jeweils eine Logzeile in meine Klassenstruktur bekomme.

Nichts leichter als das dachte ich mir und habe mich mal auf den .NET Datentyp DateTime und dessen Parse Methoden verlassen. Dazu habe ich mich dann für die “DateTime.TryParseExact” Methode entschieden um das passende Datum für das folgende Beispieldatum zu ermitteln “Tue Aug 09 19:23:14 2011”.

image

das ganze hat auch wunderbar geklappt und war nur ein kleiner Teil von dem was ich pro Zeile Parsen musste um meine Logfileklasse mit Daten zu füllen. Dann kam es zum ersten Versuch, das Einlesen eines 10.000 Zeilen langen Logfiles, was sage und schreibe rund 10 Sekunden in Anspruch nahm.

Nach reichlichem Suchen wo meine Zeit “verloren” geht habe ich die “DateTime.TryParseExact” Methode identifizieren können mit “System.Diagnostics.Stopwatch”.

Ich habe dann einfach mal für meinen speziellen Falle meine eigene “Parse” Methode geschrieben, welche auf das hier angegebene Datumsformat passt:

image

und trotz des “Umfangs” der Funktion war diese Version um den Faktor 100 Schneller, was man auch beim Einlesen des Logfiles merkte, dieses wurde jetzt quasi “Instant” geladen.

Ich hätte zu beginn nicht gedacht, das es an der “DateTime.TryParseExcact“ Methode liegt (p.s. ich habe auch die anderen Parse Methoden probiert von DateTime und alle waren so “langsam”) aber danach ist man immer schlauer. Also lieber einmal mehr schauen wo einem die Zeit “verloren” geht, denn man kann sich diese evtl. schneller wieder zurückholen als man denkt.

Advertisements

Ein Gedanke zu „Performance von DateTime.TryParseExact

  1. Pingback: Performance von SortedList und SortedDictionary « SquadWuschel's Blog

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s