Je me demandais si l'utilisation de longs noms de variables descriptifs dans WinForms C# était importante pour les performances? Je pose cette question puisque dans AutoIt v3 (langage interprété) il a été soulevé qu'avoir des variables avec des noms courts comme aa
au lieu de veryLongVariableName
est beaucoup plus rapide (quand le programme est plus grand que 5 liner). Je me demande si c'est la même chose en C#?La longueur du nom de la variable est-elle importante pour la performance C#?
Répondre
Non, ce n'est pas le cas. Le compilateur n'enregistre pas les noms de variables d'origine, vous pouvez regarder le code IL de n'importe quel assemblage compilé avec le désassembleur.
Non, je ne pense pas que cette variable longue ait un impact sur les performances d'exécution d'une application .NET. AFAIK, code intermédiaire (dans MSIL) dans un assembly .NET est traduit en langage machine avant qu'il ne soit exécuté. Ce serait là où les noms de variables sont définitivement "jetés" (si cela ne s'est pas déjà produit plus tôt) et remplacés par de simples adresses mémoire.
Qu'en est-il de l'heure de début d'une telle application? Serait-il plus court? – MadBoy
Les noms de variables ne parviennent pas à MSIL. –
Si c'est ce qui vous préoccupe, je dirais que vous essayez d'optimiser au mauvais endroit. Après tout, un assemblage ne sera chargé qu'une seule fois (dans des situations normales au moins). Même si cela prend 5 millisecondes de plus, cela n'affectera pas vraiment les performances globales de votre application. À mon humble avis, il serait plus rentable de s'inquiéter de la performance des boucles internes (qui seront exécutées de nombreuses fois), l'accès aux données inefficace (HDD/DB accès est beaucoup plus lent que l'accès à la mémoire RAM), etc – stakx
Peu importe. Bien que vous puissiez obtenir les noms lors de la décompilation (voir les autres publications pour plus de détails), ces noms ne sont pas utilisés par l'instruction IL Lecture ou écriture dans des variables/champs. Les variables et les champs sont identifiés à travers une construction différente. Dans l'espace de noms reflection.emit, ceux-ci sont représentés par LocalBuilder (pour une variable locale ou FieldBuild pour les champs) et pour souligner davantage le point: ils n'ont même pas besoin d'être explicitement nommés.
Il s'agit d'une différence clé entre un compilateur et un interpréteur. Un interpréteur effectue une recherche de nom d'identifiant pendant qu'il interprète du code. Si cette recherche de nom se produit à l'intérieur d'une boucle qui s'exécute plusieurs fois, le temps nécessaire à cette recherche peut avoir de l'importance. Les noms plus longs nécessitent plus de temps.
Le compilateur C# élimine les noms d'identifiants en deux étapes distinctes. Les noms des variables locales sont effacés et remplacés par les décalages de la pile lors de la compilation du code source en IL. Les noms d'espaces de noms et de types sont toujours présents dans l'assembly. Le compilateur JIT les efface, en les remplaçant par des décalages de code pour les méthodes et les décalages de données pour les champs. La longueur des noms d'identifiants n'a pas d'importance ici, la recherche ne se fait qu'une seule fois.
L'élimination du coût de la recherche de nom dans un interpréteur n'est pas difficile. Un interpréteur décent symbolise le code source, essentiellement une étape de pré-compilation pour rendre l'interpréteur plus efficace. Un tel interpréteur n'aurait pas non plus de problème de ralentissement avec les noms d'identifiants longs.
Aurait dû être la réponse acceptée. – ConfusedDeer
Non, une fois compilés, les noms de variables d'origine ne sont plus utilisés. La taille des noms de variables devrait avoir un très faible impact sur le temps de compilation, mais pas sur le temps d'exécution.
Les langages interprétés sont affectés un peu par de longs noms de variables. Les noms longs sont plus à lire, stocker et rechercher chaque fois qu'ils s'exécutent, mais l'effet devrait être très faible. La latence de lecture/écriture sur un disque ou même sur l'écran devrait dépasser de loin le retard causé par des noms de variables plus longs.
Si le temps d'exécution est le problème, alors plus d'algorithmes efficaces d'exécution fourniront presque certainement des retours beaucoup plus grands que raccourcir des noms variables. Si la pression de la mémoire est le problème, les algorithmes de mémoire efficace vont encore une fois économiser beaucoup plus que raccourcir les noms de variables. Si la solution est algorithmiquement aussi serrée que possible, il est temps pour une nouvelle langue.
Il y a peu d'absolus dans la programmation, mais je suis confiant dans le fait de dire raccourcir les noms de variables dans le code source pour des raisons de performance est ABSOLUMENT la mauvaise décision à chaque fois.
Dim UnlessYouOftenUseVariableNamesThatAreSoLongThatTheyMayBeConsidéréANovellaAllOnTheirOwn;) – ScottS
Je pense que la question sur la longueur du nom est réelle seulement pour Script# projets (dans le cas de la traduction de C# en JavaScript).
- 1. Nom de la branche CVS du nom de la variable
- 2. portée et la performance variable
- 3. Optimisation du code C++ pour la performance
- 4. Analyse de la longueur variable
- 5. C++ nom de la variable spéciale
- 6. nom d'impression de la variable C#
- 7. Longueur de la variable d'adresse physique
- 8. Quelle devrait être la longueur typique du nom complet de l'utilisateur dans la base de données
- 9. Markov C++ lu à partir de la performance du fichier
- 10. Détermination de la longueur de la variable de type double en C
- 11. La certification la plus importante dans WPF?
- 12. obtenir la longueur de `wchar_t *` en C++
- 13. VBscript pour surveiller la performance du système fuit la mémoire
- 14. Valeur est le nom de la variable au lieu du contenu de la variable
- 15. Erreur d'exécution ASP.NET: la longueur ne peut pas être inférieure à zéro. Nom du paramètre: longueur
- 16. Nom de fichier C++ de la variable membre
- 17. Nom de la variable de l'argument du modèle?
- 18. Choix du nom de la structure C pour doxygen?
- 19. Obtenir le nom de la variable renvoyant l'objet en C#
- 20. Pourquoi la performance de PHP strtolower est-elle si variable?
- 21. passage nom de la variable dans JSNI
- 22. Envoi de la longueur du tampon et de la mémoire tampon sur la socket dans c
- 23. Comment utiliser la variable pour le nom de variable (partielle)? (C)
- 24. Comment obtenir la longueur du tableau de pointeurs C?
- 25. php obtenir le nom de la variable d'autre variable
- 26. nom de la base de données variable
- 27. Nom de projet pour la version C#
- 28. Comment obtenir la longueur de IStream? C++
- 29. quelle est la longueur maximale de PHP variable/fonction/nom de classe?
- 30. Python: la longueur du délai de contrôle
C'est bizarre parce que quand je regarde ma source. Exe avec le réflecteur, il montre les noms de variables que j'ai utilisés. – MadBoy
Vrai, mais le code de langage intermédiaire d'un assembly .NET n'est-il pas traduit en langage machine avant son exécution? (Voir aussi ma réponse.) Si c'est le cas, cela n'a pas d'importance si les noms des variables sont encore dans l'assemblage, car ce que vous voyez là n'est pas ce qui sera exécuté. – stakx
Le compilateur crée également des fichiers .pdb qui stockent réellement les noms de variables et le code. Mais ces fichiers sont utilisés uniquement pour le débogage et non pour l'exécution des applications .NET. Peut-être que Reflector peut lire ces fichiers aussi. –