Gibt es vielmehr eine Möglichkeit festzustellen, ob es mit dem aktivierten oder deaktivierten Optimierungsparameter kompiliert wurde? Ich möchte nicht wissen, ob es Release oder Debug ist, da beide mit oder ohne Optimierungen aktiviert werden können. Aus meiner Sicht, obwohl der Code sagt, es ist Release-Version, ist es wirklich optimiert? Danke.
Eine Möglichkeit, dies zu überprüfen, ist das DebuggableAttribute
( doc ) >) bei der Montage. Das DisableOptimizations
-Flag wird nicht gesetzt, wenn der C # -Compiler die Option / optimize bestanden hat.
Hinweis: Obwohl dies für die meisten Szenarien funktioniert, ist dies keine 100% ig narrensichere Lösung. Es kann zumindest auf folgende Arten gebrochen werden:
DebuggableAttribute
definiert, hat er Vorrang vor dem, was der C # -Compiler definiert Sehen Sie sich das Assembly-Manifest mit Ildasm.exe an:
%Vor%Das ist die Release-Version. Die Debug-Build-Werte sind (01 00 07 01 00 00 00 00)
Ein weiteres Problem ist, dass der Debugger den JIT-Optimierer deaktivieren kann. Dies ist eine konfigurierbare Option in VS, Extras + Optionen, Debugging, Allgemein, "JIT-Optimierung beim Laden von Modulen unterdrücken". Sie möchten das deaktivieren, wenn Sie den Release-Build debuggen und vergleichbare Leistung wünschen. Es macht das Debuggen zu einer größeren Herausforderung, Stepping wirkt seltsam, da der Optimierer den Code neu anordnet und inline einliest, und Sie können die Werte lokaler Variablen oft nicht überprüfen, weil sie in CPU-Registern gespeichert sind.
Tags und Links optimization c# assemblies