Esta no es una respuesta en sí mismo, sino más bien una addedum a la respuesta de unos excelentes de Jon Skeet, ofreciendo una variante de la "s" formato (ISO):
/// <summary>
/// Implements a fast method to write a DateTime value to string, in the ISO "s" format.
/// </summary>
/// <param name="dateTime">The date time.</param>
/// <returns></returns>
/// <devdoc>
/// This implementation exists just for performance reasons, it is semantically identical to
/// <code>
/// text = value.HasValue ? value.Value.ToString("s") : string.Empty;
/// </code>
/// However, it runs about 3 times as fast. (Measured using the VS2015 performace profiler)
/// </devdoc>
public static string ToIsoStringFast(DateTime? dateTime) {
if (!dateTime.HasValue) {
return string.Empty;
}
DateTime dt = dateTime.Value;
char[] chars = new char[19];
Write4Chars(chars, 0, dt.Year);
chars[4] = '-';
Write2Chars(chars, 5, dt.Month);
chars[7] = '-';
Write2Chars(chars, 8, dt.Day);
chars[10] = 'T';
Write2Chars(chars, 11, dt.Hour);
chars[13] = ':';
Write2Chars(chars, 14, dt.Minute);
chars[16] = ':';
Write2Chars(chars, 17, dt.Second);
return new string(chars);
}
Con el serializador 4 dígitos como :
private static void Write4Chars(char[] chars, int offset, int value) {
chars[offset] = Digit(value/1000);
chars[offset + 1] = Digit(value/100 % 10);
chars[offset + 2] = Digit(value/10 % 10);
chars[offset + 3] = Digit(value % 10);
}
Esto cuesta alrededor de 3 veces más rápido. (Medido utilizando el perfilador de rendimiento VS2015)
33% de qué? El 33% del tiempo de procesamiento de 2 ms ni siquiera valdría la pena el refactor. –
Además, ¿qué herramienta usaste para determinar el 33%? Diferentes herramientas a veces miden cosas sutilmente diferentes, por lo que vale la pena saber ... – Stobor
¿Cómo se agrega la cadena resultante a su salida? Stringbuilder? –