in Qu'est-ce que ça change? P>
y a-t-il d'autre manière que je peux optimiser mon application .NET lors de la ciblage des plates-formes X64? P> Visual Studio> Build> Configuration Manager CODE> Vous pouvez choisir la plate-forme cible. P>
4 Réponses :
Votre c # / vb.net, etc. est compilé dans le bon IL pour la plate-forme, qu'il soit X86, X64 ou autre. Il n'y a pas de destentions séparées dans la langue pour diriger le code vers le bas de l'autre voie, la réponse est donc
Il ne "optimise" pas votre application pour des plates-formes 64 bits. .NET Les assemblages contiendront IL qui est indépendante de la plate-forme par définition indépendamment de ce paramètre. Ce paramètre renvoie simplement un drapeau dans l'ensemble cible et le rend dirigé sur la version spécifique de l'exécution. P>
@Mehrdad et si je ne configurais pas ce drapeau, il fonctionnera sur la mauvaise version du temps d'exécution? Et cela va perdre des performances?
@Jader: AnyCPU chargera l'heure d'exécution 64 bits sur un système d'exploitation 64 bits et 32 bits sur un système d'exploitation 32 bits (ou quel que soit le processus parent exécuté, s'il est chargé dans un processus). X86 le forcera à fonctionner dans 32 bits CLR, même dans un système d'exploitation 64 bits (en mode WOW64). Voir msdn.microsoft.com/en-us/Library/ zekwfyz4 (vs.80) .aspx pour plus de détails.
Le code IL lui-même n'est pas optimisé pour 64 bits, mais en raison du plus grand nombre de registres de X64, le code natif que le compilateur JIT génère est potentiellement plus rapide. Les deux compilateurs JIT (X86 et X64) sont très différents en termes de capacités de génération de code. Il existe un blog de MSDN intéressant sur le thème de la génération de code natif à partir du code IL: blogs.msdn.com /clrcodeGeneration/default.aspx
Comme déjà mentionné, l'IL dans l'assemblage .NET est indépendant de la plate-forme (c'est ce que l'implication tout paramètre CPU EM> implique). Le compilateur JIT (juste à temps) du .NET Runtime compilera cette plate-forme de code d'octet indépendant dans le code natif spécifique de la plate-forme avec l'optimisation spécifique à cette plate-forme. Donc, il n'y a normalement rien que vous devriez vous inquiéter. P>
Toutefois, si vous définissez explicitement votre projet pour être en construction avec X64 comme la citation de la plate-forme, l'assemblage ne fonctionnera plus sur un X86 d'exécution (et inversement pour X86 à la cible de la plate-forme). Ceci n'est utile que si votre code a des dépendances aux bibliothèques natales X64 / X86 telles que les composants COM de processus. P>
Comme Rowland ajouté dans un commentaire, la citation de la plate-forme ne doit pas être confondue avec l'anchement du système d'exploitation sous-jacent. Les assemblages .NET avec X86 lorsque la citation de la plate-forme s'exécutera sur des versions 32 bits et 64 bits de Windows (c'est-à-dire en tant que processus de 32 bits en mode WOW64). p>
En fait, le scénario le plus courant pour utiliser le paramètre Cible de la plate-forme est probablement lorsque votre assemblage .NET a une référence à un composant COM 32 bits. Pour pouvoir exécuter l'assemblage sur un système X64, l'assemblage doit être compilé avec le drapeau X86. Sur un système d'exploitation 64 bits et avec le paramètre tout paramètre CPU EM> activé, l'exécution exécuterait l'assemblage dans un processus 64 bits et chargerait le chargement du composant COM 32 bits dans le processus 64 bits échouerait. La compilation avec le drapeau X86 provoque l'exécution de l'ensemble .NET pour exécuter l'assemblage dans un processus 32 bits et donc le composant COM peut être chargé en toute sécurité. P>
x86 .net applications fonctionnera sur x64, mais pas vice-versa.
La configuration par défaut pour une application .NET est une CPU qui signifie que les assemblys s'exécuteront sur des plates-formes 32 et 64 bits. Vous pouvez toutefois spécifier 32 bits ou 64 bits pour nécessiter une heure d'exécution 32 ou 64 bits. P>
N'oubliez pas que le code IL dans les assemblages est compilé JIT lorsque l'application est exécutée. Ainsi, un assemblage de la CPU fonctionnera sur les 32 et 64 bits sans autre ADO. P>