2008-09-19 13 views

Antwort

19

Dies ist festgelegt, wenn Sie Ihre Baugruppe kompilieren. Es gibt zwei Arten von Optimierungen:

  • IL Optimierung
  • JIT systemeigenen Code-Qualität.

Die Standardeinstellung ist diese

/optimize- /debug- 

Diese unoptimized IL bedeutet und optimiert nativen Code.

/optimize /debug(+/full/pdbonly) 

Dies bedeutet nicht optimierte IL und nicht optimierten nativen Code (beste Debug-Einstellungen).

schließlich die schnellste Leistung zu erhalten:

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

Diese IL optimiert produziert und nativen Code optimiert.

Bei der Erstellung nicht optimierter IL fügt der Compiler NOP-Anweisungen über den gesamten Code ein. Dies macht den Code leichter zu debuggen, indem es erlaubt, Breakpoints in Kontrollflussanweisungen wie für, während, wenn, sonst, Versuch, Fangen usw. zu setzen. Die CLR leistet eine bemerkenswert gute Arbeit beim Optimieren von Code unabhängig davon. Sobald eine Methode JIT-aktiv ist, wird der Zeiger auf einen Aufruf oder eine Callvirt-Anweisung direkt auf den systemeigenen Code gerichtet.

Zusätzlich nutzt die CLR alle Architekturtricks, die verfügbar sind, wenn Sie Ihren Code JITEN. Das bedeutet, dass eine Assembly, die durch den JIT läuft, schneller läuft als eine Assembly, die mit Ngen kompiliert wurde (allerdings mit einer etwas langsameren Startzeit), da NGen für alle Plattformen kompiliert und keine Tricks ausnutzt.

+3

+1 Schön. Wo genau in der IDE setzen Sie diese Werte? – Trap

+1

Aktivieren Sie in VS2010 (und früheren Versionen IIRC) die Projekteinstellung "Code optimieren", die standardmäßig in der Release-Konfiguration aktiviert ist. (Dies entspricht "/ optimize", was äquivalent zu '/ optimize +' ist.) Beachten Sie, dass der Optimizer [weit von perfekt] entfernt ist (http://stackoverflow.com/questions/10369421/why-does-adding-local) -Variablen-make-net-code-langsamer. –

+1

Es gibt keine Tricks pro Maschine, AFAIK. Mir wurde gesagt, dass das .NET-Team der Meinung war, dass die Pflege mehrerer Versionen des JIT-Optimierers (was ein SEHR komplexes Biest ist) im Vergleich zum potenziellen Nutzen zu kostspielig sei. –