Algunas pruebas de rendimiento (de velocidad) que resumen las diversas opciones, no es que realmente importe #microoptimización (usando una extensión linqpad )
Opciones
void Main()
{
object objValue = null;
test(objValue);
string strValue = null;
test(strValue);
}
// Define other methods and classes here
void test(string value) {
new Perf<string> {
{ "coallesce", n => (value ?? string.Empty).ToString() },
{ "nullcheck", n => value == null ? string.Empty : value.ToString() },
{ "str.Format", n => string.Format("{0}", value) },
{ "str.Concat", n => string.Concat(value) },
{ "string +", n => "" + value },
{ "Convert", n => Convert.ToString(value) },
}.Vs();
}
void test(object value) {
new Perf<string> {
{ "coallesce", n => (value ?? string.Empty).ToString() },
{ "nullcheck", n => value == null ? string.Empty : value.ToString() },
{ "str.Format", n => string.Format("{0}", value) },
{ "str.Concat", n => string.Concat(value) },
{ "string +", n => "" + value },
{ "Convert", n => Convert.ToString(value) },
}.Vs();
}
Probablemente sea importante señalar que Convert.ToString(...)
conservará una cadena nula.
Resultados
Objeto
- nullcheck 1.00x 1221 tics transcurridos (0.1221 ms) [en 10K repeticiones, 1.221E-05 ms por]
- carbonlesce 1,14x 1387 tics transcurridos (0,1387 ms) [en 10K repeticiones, 1,387E-05 ms por]
- cadena + 1,16 x 1415 tics transcurridos (0,1415 ms) [en 10K repeticiones, 1,415E-05 ms por]
- str.Concat 1,16 x 1420 tics transcurridos (0,142 ms) [en 10.000 repeticiones, 1,42E-05 ms por]
- Convertir 1,58 x 1931 tics transcurridos (0,1931 ms) [en 10K repeticiones, 1,931E-05 ms por]
- str.Format 5.45x 6655 tics transcurridos (0.6655 ms) [en 10K repeticiones, 6.655E-05 ms por]
Cuerda
- nullcheck 1,00 x 1190 tics transcurridos (0,119 ms) [en 10K repeticiones, 1,19E-05 ms por]
- Convertir 1.01x 1200 ticks transcurridos (0.12 ms) [en 10K repeticiones, 1.2E-05 ms por]
- string + 1.04x 1239 tics transcurridos (0.1239 ms) [en 10K repeticiones, 1.239E-05 ms por]
- carbonlesce 1,20 x 1423 tics transcurridos (0,1423 ms) [en 10.000 repeticiones, 1,423E-05 ms por]
- str.Concat 4.57x 5444 tics transcurridos (0.5444 ms) [en 10K repeticiones, 5.444E-05 ms por]
- str.Format 5,67 x 6750 tics transcurridos (0,675 ms) [en 10K repeticiones, 6,75E-05 ms por]