241 votes

L'utilisation de 'var' affectera-t-elle les performances?

Plus tôt, j'ai posé une question au sujet de pourquoi je vois tellement de nombreux exemples d'utilisation de la 'var' mot-clé et a obtenu la réponse que si elle est nécessaire seulement pour les types anonymes, qu'il est utilisé néanmoins à faire de l'écriture de code 'rapide'/plus facile et "juste comme ça".

En suivant ce lien , j'ai vu que la var sera compilé vers le bas pour le type correct dans l'ILLINOIS (vous verrez qu'il est à mi-chemin en bas de l'article).

Ma question est de savoir comment beaucoup plus, le cas échéant, du code IL n'à l'aide de la 'var' mot-clé le prendre, et il serait même sur le point d'avoir un niveau mesurable sur la performance du code, si il a été utilisé partout?

edit: question Précédente est ici.

323voto

Joel Coehoorn Points 190579

Il n'y a pas de code IL supplémentaire pour le mot-clé var : l'IL qui en résulte doit être identique pour les types non-anonymes. Si le compilateur ne peut pas créer cette IL parce qu'il ne peut pas comprendre quel type vous vouliez utiliser, vous obtiendrez une erreur de compilateur.

La seule astuce est que var déduira un type exact où vous pourriez avoir choisi une interface ou un type parent si vous deviez définir le type manuellement.

75voto

ljs Points 16511

Comme le dit Joel, le compilateur élabore au moment de la compilation ce que var devrait être, en fait, c'est juste un truc que le compilateur effectue pour sauver les frappes, par exemple

 var s = "hi";
 

est remplacé par

 string s = "hi";
 

par le compilateur avant que toute IL est générée. L'IL générée sera exactement la même que si vous aviez tapé une chaîne.

30voto

RichardOD Points 19942

Comme personne n’a parlé de réflecteur encore...

Si vous compilez le code c# suivant :

Ensuite, utilisez réflecteur là-dessus, vous obtenez :

Si la réponse n’est clairement aucune baisse de performance de DUREE !

17voto

Rob Points 91

Pour la méthode suivante :

La sortie IL est la suivante :

14voto

Michael Burr Points 181287

Le compilateur c# déduit le type réel de le `` variable au moment de la compilation. Il n’y a aucune différence dans l’IL généré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X