Me sorprendió lo lento que es DateTime.Parse
. Este código tarda alrededor de 100 segundos en ejecutarse; si uso la versión de regex demora 100 milisegundos. ¿Qué está pasando aquí?¿Por qué DateTime.Parse es tan 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);
Editar: Mark es derecha, moviendo el CultureInfo.CreateSpecificCulture("en-US")
fuera del bucle ayudó. La razón por la que no lo hice antes es que he perfilado este código con VS Profiler y mostró siguiente resultado:
Oooh, me siento tan estúpido, realmente moviendo 'CreateSpecificCulture' fuera del rendimiento fijo del bucle. La razón por la que no lo hice antes porque utilicé VS Profiler y mostró que el problema está en 'Parse', vea la captura de pantalla en edit. – Andrey
Estoy de acuerdo, por supuesto, que usar Regex es una especie de trampa aquí, pero consideré cambiarlo porque estaba 100% seguro de que los datos de entrada son válidos y el rendimiento era más importante. – Andrey