Sono rimasto scioccato da quanto sia lento lo DateTime.Parse
. Questo codice richiede circa 100 secondi per essere eseguito; se uso la versione regex ci vogliono 100 millisecondi. Cosa sta succedendo qui?Perché DateTime.Parse è lento?
Stopwatch sw = new Stopwatch();
sw.Start();
var re = new Regex(@"(\d\d)/(\d\d)/(\d\d\d\d) (\d\d):(\d\d):(\d\d)", RegexOptions.Compiled);
for (int i = 0; i < 100000; i++)
{
//var m = re.Match("08/01/2012 23:10:12");
DateTime.Parse("08/01/2012 23:10:12", CultureInfo.CreateSpecificCulture("en-US"));
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Edit: Mark è a destra, spostando la CultureInfo.CreateSpecificCulture("en-US")
fuori del ciclo aiutato. La ragione per cui non l'ho fatto prima è che ho fatto il profilo questo codice con VS Profiler ed ha mostrato seguente risultato:
Oooh, mi sento così stupido, in realtà spostare 'CreateSpecificCulture' dal ciclo di prestazioni fisse. La ragione per cui non l'ho fatto prima, perché ho usato VS Profiler e ha mostrato che il problema è nel 'Parse', vedi screenshot in edit. – Andrey
Sono d'accordo, ovviamente, che usare Regex è una sorta di imbroglio qui, ma ho preso in considerazione il passaggio ad esso perché ero sicuro al 100% che i dati di input fossero validi e che le prestazioni fossero più importanti. – Andrey