Usted está tratando de micro-optimize aquí, y eso es generalmente un gran no-no. A menos que tenga análisis de desempeño que le muestren que esto es un problema, ni siquiera vale la pena cambiarlo.
Para uso general, la respuesta correcta es la que sea más fácil de mantener.
Por el placer de hacerlo, sin embargo, la IL para el operador coalescente nula es:
L_0001: ldsfld string ConsoleApplication2.Program::myString
L_0006: dup
L_0007: brtrue.s L_000f
L_0009: pop
L_000a: ldsfld string [mscorlib]System.String::Empty
L_000f: stloc.0
Y la IL para el interruptor es:
L_0001: ldsfld string ConsoleApplication2.Program::myString
L_0006: brfalse.s L_000f
L_0008: ldsfld string ConsoleApplication2.Program::myString
L_000d: br.s L_0014
L_000f: ldsfld string [mscorlib]System.String::Empty
L_0014: stloc.0
Para el null coalescing operator, si el valor es null
, luego se ejecutan seis de las instrucciones, mientras que con el switch
, se realizan cuatro operaciones.
En el caso de un valor no null
, el operador coalescente nulo realiza cuatro operaciones contra cinco operaciones.
Por supuesto, esto supone que todas las operaciones IL toman la misma cantidad de tiempo, que no es el caso.
De todos modos, con suerte se puede ver cómo la optimización en esta microescala puede comenzar a disminuir los retornos con bastante rapidez.
Dicho esto, al final, para la mayoría de los casos lo que es la más fácil de leer y mantener en este caso es la respuesta correcta.
Si encuentra que está haciendo esto en una escala en la que resulta ineficiente (y esos casos son pocos y distantes), entonces debe medir para ver cuál tiene un mejor rendimiento y luego hacer esa optimización específica.
Por supuesto, tenga en cuenta que muchos programadores pueden leer? : declaraciones tan rápido como las declaraciones regulares de if. En algunos casos, son incluso más claros que el uso de sentencias if/else sin llaves. – NotMe
Estoy de acuerdo. Muchas publicaciones aquí son preguntas de rendimiento, preguntando por ajustes menores (¿es ++ más rápido que + = 1?) Que realmente no importan. La velocidad proviene de la complejidad algorítmica: se reducen las copias de memoria masivas, se buscan contenedores rápidamente, se procesa de forma adecuada. Los ajustes menores no tienen impacto en el rendimiento. – abelenky
-1: Mientras que los puntos de chublogga son todos verdaderos y válidos y bien expresado, que no responden a la pregunta original. El OP es un adulto que puede hacer sus propias elecciones de arquitectura/legibilidad, y la respuesta de casperOne es realmente una respuesta más interesante y directa a la cuestión específica del rendimiento. – nezroy