programar - reglas de sintaxis de c#
¿Importa la longitud del nombre de la variable para el rendimiento C#? (6)
Me he estado preguntando si el uso de nombres de variables descriptivos largos en WinForms C # es importante para el rendimiento? Estoy haciendo esta pregunta ya que en AutoIt v3 (lenguaje interpretado) se mencionó que tener variables con nombres cortos como aa
lugar de veryLongVariableName
es mucho más rápido (cuando el programa es más grande que 5 líneas). Me pregunto si es lo mismo en C #?
Creo que la pregunta sobre la longitud del nombre es real solo para proyectos Script# (en caso de traducir C # a JavaScript).
Es una diferencia clave entre un compilador y un intérprete. Un intérprete realiza una búsqueda de nombre de identificador mientras interpreta el código. Si esa búsqueda de nombre ocurre dentro de un bucle que se ejecuta muchas veces, el tiempo necesario para esa búsqueda puede ser importante. Los nombres más largos requieren más tiempo.
El compilador de C # elimina los nombres de los identificadores en dos etapas distintas. Los nombres de las variables locales se borran y se reemplazan por las compensaciones de cuadros de la pila cuando compila el código fuente a IL. Los nombres de espacios de nombres y de tipo todavía están presentes en el ensamblaje. El compilador JIT los borra, reemplazándolos con compensaciones de código para métodos y compensaciones de datos para campos. La longitud de los nombres de los identificadores no importa aquí, la búsqueda solo ocurre una vez.
Eliminar el costo de la búsqueda de nombres en un intérprete no es difícil por cierto. Un intérprete decente tokeniza el código fuente, esencialmente un paso de precompilación para hacer que el intérprete sea más eficiente. Tal intérprete tampoco tendría un problema de desaceleración con nombres de identificadores largos.
No importa. A pesar de que puede obtener los nombres al descompilarlos (consulte otras publicaciones para obtener más detalles), la instrucción IL no utiliza esos nombres para leer o escribir en variables / campos. Las variables y los campos se identifican a través de una construcción diferente. En el espacio de nombres reflection.emit, estos están representados por LocalBuilder (para una variable local o FieldBuild para los campos) y para enfatizar aún más el punto: ni siquiera necesitan un nombre explícito.
No, no creo que una variable larga tenga ningún impacto en el rendimiento de ejecución de una aplicación .NET. AFAIK, el código intermedio (en MSIL) en un ensamblado .NET se traduce al lenguaje de máquina antes de ejecutarse. Aquí es donde los nombres de las variables se "descartan" definitivamente (si no se han producido anteriormente) y se reemplazan por direcciones de memoria simples.
No, no lo hace. El compilador en realidad no guarda los nombres de las variables originales, puede mirar el código IL de cualquier ensamblaje compilado con desensamblador.
No, una vez compilados los nombres de variables originales ya no se usan. El tamaño de los nombres de las variables debe tener un efecto muy pequeño en el tiempo de compilación, pero no en el tiempo de ejecución.
Los lenguajes interpretados se ven afectados un poco por nombres de variables largos. Los nombres largos son más para leer, almacenar y buscar cada vez que se ejecutan, pero el efecto debe ser muy pequeño. La latencia en la lectura / escritura en un disco o incluso en la pantalla debe exceder con mucho la demora causada por nombres de variables más largos.
Si el tiempo de ejecución es el problema, entonces los algoritmos más eficientes en la ejecución casi seguramente proporcionarán rendimientos mucho mayores que acortar los nombres de las variables. Si la presión de la memoria es el problema, los algoritmos eficientes de memoria probablemente ahorren mucho más que acortar nombres de variables. Si la solución es algorítmicamente tan ajustada como puede ser, es hora de un nuevo idioma.
Hay pocos aspectos absolutos en la programación, pero me siento confiado al decir que acortar los nombres de las variables en el código fuente por razones de rendimiento es ABSOLUTAMENTE la decisión equivocada CADA vez.