Wofür ist / optimize C # -Compilerschlüssel gedacht?

8

Gibt es eine vollständige Liste der Optimierungen, die durch den / optimierten C # -Compilerschlüssel überall verfügbar?

BEARBEITEN: Warum ist es standardmäßig deaktiviert? Lohnt es sich, in einer echten App zu verwenden? - es ist standardmäßig nur in der Debug-Konfiguration und in Release aktiviert.

    
Max Galkin 09.06.2009, 10:01
quelle

3 Antworten

7

Scott Hanselman hat einen Blogbeitrag , der einige Beispiele für was / optimize zeigt (was in Release aktiviert ist) Builds).

Als Zusammenfassung: / optimize macht viele Dinge ohne genaue Zahl oder Definition, aber eine der sichtbarsten sind Methodeninlining (Wenn Sie eine Methode A () haben, die B () aufruft, die C () aufruft, die aufruft D (), kann der Compiler "B" und "C" "überspringen" und direkt von A nach D gehen, was einen "seltsamen" Callstack im Release-Build verursachen kann.

    
Michael Stum 09.06.2009, 10:39
quelle
2

Es ist standardmäßig für Debug-Builds deaktiviert. Für Release-Builds ist es aktiviert.

Es lohnt sich, diesen Schalter zu aktivieren, da der Compiler abhängig von der Art des Codes viele Optimierungen und Optimierungen vornimmt. Zum Beispiel: Überspringe redundante Initialisierungen, Vergleiche, die sich niemals ändern usw.

Hinweis: Sie haben möglicherweise Schwierigkeiten beim Debuggen, wenn Sie die Optimierung als Code aktivieren und der generierte IL-Code möglicherweise nicht übereinstimmt. Aus diesem Grund ist es nur für Release-Builds aktiviert.

    
bobbyalex 09.06.2009 10:08
quelle
2

Zitiert von der MSDN-Seite :

  

Die Option / optimize aktiviert oder   deaktiviert Optimierungen von   der Compiler, um Ihre Ausgabedatei zu erstellen   kleiner, schneller und effizienter.

Mit anderen Worten, es macht genau das, was Sie denken - optimiert den kompilierten CIL-Code (Common Intermediate Language), der von der .NET-VM ausgeführt wird. Ich mache mir keine Gedanken darüber, was die spezifischen Optimierungen sind - es genügt zu sagen, dass sie viele sind und in manchen Fällen wahrscheinlich ziemlich komplex sind. Wenn Sie wirklich daran interessiert sind, was für Dinge es tut, könnten Sie wahrscheinlich den Mono C # -Compiler untersuchen (ich bezweifle die Details über die MS C # one sind öffentlich).

Der Grund, warum die Optimierung für Debug -Konfigurationen standardmäßig deaktiviert ist, ist, dass bestimmte Debugging-Funktionen nicht möglich sind. Ein paar bemerkenswerte:

  • Vielleicht am wichtigsten ist die Edit and Continue Funktion deaktiviert - d. h. kein modifizierender Code während der Ausführung.
  • Breaking Execution bedeutet oft, dass die falsche Codezeile markiert ist (normalerweise die nach dem erwarteten Code).
  • Unbenutzte lokale Variablen werden nicht wirklich zugewiesen oder gar deklariert.

Wirklich, die Standardoptionen für die Optimierung sollten nie geändert werden. Das Deaktivieren der Option zum Debuggen ist sehr hilfreich, während es für den Release-Modus ebenfalls ratsam ist.

    
Noldorin 09.06.2009 10:27
quelle