Me he estado preguntando si el uso de nombres largos de variables descriptivas 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
en lugar de veryLongVariableName
es mucho más rápido (cuando el programa es más grande que 5 delineador). Me pregunto si es lo mismo en C#?¿Importa la longitud del nombre variable para el rendimiento C#?
Respuesta
No, no lo hace. El compilador en realidad no guarda los nombres de las variables originales; puede ver el código IL de cualquier ensamblado compilado con desensamblador.
No, no creo que esa 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 que se ejecute. Aquí es donde los nombres de las variables definitivamente se "descartarán" (si no han sucedido antes) y se reemplazarán por direcciones de memoria simples.
¿Qué pasa con la hora de inicio de dicha aplicación? ¿Sería más corto? – MadBoy
Los nombres de las variables no llegan a MSIL. –
Si eso es lo que le preocupa, diría que trata de optimizar en el lugar equivocado. Después de todo, un ensamblaje solo se cargará una vez (al menos en situaciones normales). Incluso si eso lleva 5 milisegundos más, eso no afectará realmente el rendimiento general del tiempo de ejecución de su aplicación. En mi humilde opinión, pagaría más por preocuparse por el rendimiento de los bucles internos (que se ejecutarán muchas, muchas veces), el acceso a datos ineficaz (el acceso a HDD/DB es mucho más lento que el acceso a memoria RAM). – stakx
No importa. Aunque puede obtener los nombres al descompilar (ver otros mensajes para más detalles), la instrucción IL no usa esos nombres Leyendo o escribiendo en variables/campos. Las variables y los campos se identifican a través de una construcción diferente. En el espacio de nombre reflection.emit estos son representados por LocalBuilder (para una variable local o FieldBuild para campos) y para enfatizar aún más el punto: ni siquiera necesitan ser nombrados explícitamente.
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 la búsqueda del nombre ocurre dentro de un bucle que se ejecuta muchas veces, el tiempo necesario para esa búsqueda puede ser importante. Nombres más largos requieren más tiempo.
El compilador C# elimina los nombres de los identificadores en dos etapas distintas. Los nombres de las variables locales se borran y reemplazan por compensaciones de cuadros de pila cuando compila el código fuente a IL. Namespace y nombres de tipos todavía están presentes en el ensamblado. El compilador JIT borra esos, reemplazándolos con los desplazamientos de código para los métodos y los desplazamientos de datos para los campos. La longitud de los nombres de los identificadores no importa aquí, la búsqueda solo ocurre una vez.
Eliminar el gasto de la búsqueda de nombre en un intérprete no es difícil por cierto. Un intérprete decente tokeniza el código fuente, esencialmente un paso previo a la compilación para hacer que el intérprete sea más eficiente. Tal intérprete tampoco tendría un problema de ralentización con los nombres largos de los identificadores.
Debería haber sido la respuesta aceptada. – ConfusedDeer
No, una vez compilados, los nombres de las variables originales ya no se utilizan. El tamaño de los nombres de las variables debería tener un efecto muy pequeño en el tiempo de compilación, pero no en el tiempo de ejecución.
Los idiomas interpretados se ven afectados un poco por los nombres largos de variable. 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 debería exceder el retraso causado por nombres de variables más largos.
Si el problema es el tiempo de ejecución, es probable que más algoritmos eficientes en la ejecución proporcionen rendimientos mucho mayores que el acortamiento de nombres de variables. Si la presión de la memoria es el problema, es probable que los algoritmos de memoria ahorren mucho más que acortar los nombres de las variables. Si la solución es algorítmicamente tan estrecha como puede ser, es hora de un nuevo idioma.
Hay algunos absolutos en la programación, pero me siento seguro 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.
Dim UnlessYouOftenUseVariableNamesThatAreSoLongThatTheyMayBeConsideredANovellaAllOnTheirOwn;) – ScottS
Creo que la pregunta sobre la longitud del nombre es real solo para los proyectos Script# (en el caso de la traducción de C# a JavaScript).
- 1. ¿El nombre de la tabla o la longitud del nombre de la columna afectan el rendimiento?
- 2. Longitud máxima del nombre de la variable en JavaScript
- 3. Nombre máximo del método Longitud
- 4. Efecto de la longitud del nombre de campo de una base de datos en el rendimiento?
- 5. argumentos de longitud variable C#
- 6. ¿Importa el caso del nombre de host HTTP (superior/inferior)?
- 7. longitud máxima del nombre del archivo
- 8. C99 rendimiento de matriz automática de longitud variable
- 9. C# Nombre de variable
- 10. ¿Sobrecarga de la matriz de longitud variable en C++?
- 11. Pasar la variable "nombre" en C++
- 12. C#: cómo obtener la longitud del hilo en el hilo []
- 13. Longitud máxima del nombre de la variable o método en Java
- 14. Error del cargador SQL: "El campo de longitud variable excede la longitud máxima".
- 15. nombre del campo mysql de la variable
- 16. Imprima el nombre de la variable objetivo-C
- 17. imprimir nombre de la variable en C#
- 18. Nombre de visualización del paquete Longitud máxima
- 19. Obteniendo la longitud del video
- 20. En cuanto a rendimiento, ¿es mejor llamar la longitud de una matriz dada cada vez o almacenar la longitud en una variable y llamar esa variable cada vez?
- 21. C# 'es' el rendimiento del operador
- 22. Rendimiento de Postgres: ¿longitud de fila estática?
- 23. Mejorando el rendimiento del código C
- 24. Arreglo de longitud variable
- 25. ¿La longitud del campo de la base de datos (máxima) afecta el rendimiento?
- 26. ¿Admite C# el espacio de nombre predeterminado de todo el proyecto Importa como VB.NET?
- 27. ¿Existe un límite en PHP para la longitud de un nombre de variable o nombre de función?
- 28. dos puntos después del nombre de la variable en el código C
- 29. viene el nombre de un código de estado HTTP importa
- 30. C contra # rendimiento y nombre de la NIC
Eso es extraño porque cuando miro mi fuente .exe con reflector, muestra nombres de variables que son los que he usado. – MadBoy
Es verdad, pero ¿el código de lenguaje intermedio en un ensamblado .NET no se traduce al lenguaje de la máquina antes de que se ejecute? (También vea mi respuesta.) De ser así, no importa si los nombres de las variables todavía están en el ensamblado, porque lo que ve allí no será lo que se ejecutará. – stakx
El compilador también crea archivos .pdb que almacenan nombres de variables y códigos. Pero estos archivos se usan solo para la depuración, no para la ejecución de las aplicaciones .NET. Quizás Reflector también puede leer estos archivos. –