2008-09-19 29 views

Répondre

19

Ceci est défini lorsque vous compilez votre assembly. Il existe deux types d'optimisations:

  • IL optimisation
  • qualité JIT code natif.

Le réglage par défaut est ce

/optimize- /debug- 

Cela signifie unoptimized IL, et optimisé le code natif.

/optimize /debug(+/full/pdbonly) 

Ceci signifie IL non optimisé, et code natif non optimisé (meilleurs paramètres de débogage).

Enfin, pour obtenir les meilleures performances:

/optimize+ /debug(-/+/full/pdbonly) 

Produit une optimisé IL et optimisé du code natif.

Lors de la production de IL non optimisé, le compilateur insère des instructions NOP partout dans le code. Cela rend le code plus facile à déboguer en permettant de définir des points d'arrêt sur des instructions de flux de contrôle telles que, pendant, si, sinon, essayez, attrapez etc.

Le CLR fait un excellent travail d'optimisation du code. Une fois qu'une méthode est JIT'ed, le pointeur sur un appel ou une instruction callvirt est dirigé directement vers le code natif.

En outre, le CLR profitera de toutes les astuces d'architecture disponibles lors de l'exécution de votre code. Cela signifie qu'un assembly exécuté via le JIT s'exécutera plus vite qu'un assembly pré-compilé en utilisant Ngen (bien qu'avec un temps de démarrage légèrement plus lent), car NGen compilera pour toutes les plateformes, et ne tirera aucun avantage des astuces.

+3

+1 Nice. Où exactement dans l'EDI vous définissez ces valeurs? – Trap

+1

Dans VS2010 (et versions antérieures IIRC), activez le paramètre de projet "Optimiser le code", qui est activé par défaut dans la configuration Release. (Ceci est équivalent à '/ optimize', ce qui équivaut à'/optimize + '.) Notez que l'optimiseur est [loin de la perfection] (http://stackoverflow.com/questions/10369421/why-does-adding-local -variables-make-net-code-plus lent). –

+1

Il n'y a pas de trucs par machine, AFAIK. On m'a dit que l'équipe .NET pensait que le maintien de plusieurs versions de l'optimiseur JIT (qui est une bête très complexe) était trop coûteux par rapport à l'avantage potentiel. –