Ich frage mich, ob es eine Möglichkeit gibt, das Verhalten des .NET JIT-Compilers zu ändern, indem Sie eine Präferenz für detailliertere Optimierungen angeben. Wenn das nicht gelingt, wäre es schön, wenn es eine Art profilgesteuerte Optimierung geben könnte, wenn es nicht schon geschehen ist.Gibt es eine Möglichkeit, den .NET JIT-Compiler zu ändern, um die Leistung während der Kompilierungszeit zu verbessern?
Antwort
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.
+1 Schön. Wo genau in der IDE setzen Sie diese Werte? – Trap
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. –
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. –