Mit Build erstellen in Release wird die Compileroption/optimiert für den C# -Compiler aktiviert. Das hat eine paar Nebenwirkungen, die IL ändert sich aber nicht viel. Bemerkenswert ist, dass der Compiler sich nicht mehr darum bemüht, den Code einwandfrei debuggbar zu machen. Es überspringt beispielsweise einen leeren statischen Konstruktor, es gibt keine NOP-Opcodes mehr aus, mit denen Sie einen Haltepunkt in einer geschweiften Klammer setzen können und lokale Variablen mit unterschiedlichen Bereichen in einem Stapelrahmen überlappen können. Kleines Zeug.
Der wichtigste Unterschied ist das Attribut [Debuggable], das für die Assembly ausgegeben wird. Die IsJITOptimizerDisabled-Eigenschaft ist false.
Welche schaltet den real Optimierer, der in den Jitter eingebaut ist. Sie finden die Liste der Optimierungen in this answer. Beachten Sie die Nützlichkeit dieses Ansatzes, any Sprache Vorteile von Code-Optimierer im Jitter anstelle des Compilers zu haben.
Also kurz gesagt, sehr kleine Änderungen in der IL, sehr große Änderungen im generierten Maschinencode.
Gute Frage, aber warum möchten Sie wissen? – Cameron
Weil ich in einem Vorstellungsgespräch abgelehnt wurde und sauer wurde. Ich denke, wir Entwickler sollten mehr darüber wissen, wie diese Dinge hinter den Kulissen funktionieren – RollRoll
Große Frage! – nawfal