Question

Je sais que .NET est JIT compilé sur l'architecture sur laquelle vous exécutez juste avant l'exécution de l'application, mais le compilateur JIT est-il optimisé pour l'architecture 64 bits ?

Y a-t-il quelque chose qui doit être fait ou pris en compte lors de la programmation d'une application qui s'exécutera sur un 64bit system?(c'est à dire.L'utilisation d'Int64 améliorera-t-elle les performances et le compilateur JIT fera-t-il automatiquement fonctionner Int64 sur les systèmes 32 bits ?)

Était-ce utile?

La solution

Le JIT 64 bits est différent par rapport à celui pour 32 bits, je m'attendrais donc à quelques différences dans la sortie - mais je ne passerais pas à 64 bits juste pour cela, et je ne m'attendrais pas à gagner beaucoup de vitesse (le cas échéant) en temps CPU en passant à 64 bits.

Vous remarquerez une nette amélioration des performances si votre application utilise beaucoup de mémoire et que le PC dispose de suffisamment de RAM pour la suivre.J'ai constaté que les applications .NET 32 bits ont tendance à commencer à générer des exceptions de mémoire insuffisante lorsque vous atteignez environ 1,6 Go d'utilisation, mais elles commencent à détruire le disque en raison de pagination bien avant cela - vous finissez donc par être lié aux E/S.

Fondamentalement, si votre goulot d'étranglement est le processeur, il est peu probable que 64 bits vous aide.Si votre goulot d'étranglement est la mémoire, vous devriez constater une grande amélioration.

L'utilisation d'Int64 améliorera-t-elle les performances et le compilateur JIT fera-t-il automatiquement fonctionner Int64 sur les systèmes 32 bits ?

Int64 fonctionne déjà sur les systèmes 32 bits et 64 bits, mais il sera plus rapide sur 64 bits.Donc, si vous faites principalement des calculs avec Int64, fonctionner sur un système 64 bits devrait vous aider.

Le plus important est de mesure votre prestation.

Autres conseils

Ce est un bon article sur le sujet, rédigé par l'une des personnes qui ont travaillé sur le JIT 64 bits.Fondamentalement, à moins que vous n'ayez absolument besoin de l'espace d'adressage que le 64 bits peut offrir, ou que vous ayez besoin de faire des calculs 64 bits, vous perdrez probablement en performances.Comme les pointeurs sont plus grands, le cache est effectivement réduit de moitié, par exemple.

J'ai remarqué que le 64 bits était beaucoup plus lent.

Comme cela a été indiqué, le compilateur JIT 64 bits se comporte différemment du compilateur JIT x86.Le compilateur x86 profitera de certaines optimisations que celui x64 ne bénéficie pas.

Par exemple, dans .NET 3.5, le JIT 32 bits intégrera les appels de fonction avec des structures comme arguments, mais pas le JIT 64 bits.

Dans le code de production, j'ai vu des builds x86 s'exécuter jusqu'à 20 % plus rapidement que les builds x64 (sans autres changements)

Pour résumer, utilisez 64 bits uniquement si

  1. Vous avez besoin de mémoire supplémentaire et il n’y a aucun moyen de contourner ce problème.
  2. Vous programmez par ex.applications scientifiques et ont besoin d'une précision mathématique accrue

Sur tous les autres aspects, à ce jour, le compilateur 64 bits de .NET est un cran en dessous.

Les optimisations de performances effectuées dans les compilateurs .NET constituent un gros problème.

Les goulots d'étranglement en termes de performances seront les mêmes, que l'architecture soit 32 ou 64 bits.Les problèmes de performances ont tendance à être le résultat d'algorithmes sous-optimaux : le choix entre les types 32 et 64 bits n'affectera pas de manière significative les performances.

Plus important encore, n’essayez pas d’améliorer les performances de quelque chose avant de l’avoir mesuré.En particulier, vous devez profiler le code pour déterminer où se trouvent vos goulots d'étranglement en matière de performances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top