Gibt es eine Möglichkeit festzustellen, ob eine C # -Assembly mit dem Optimierungsparameter kompiliert wurde?

8

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.

    
John 20.08.2010, 18:02
quelle

3 Antworten

7

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:

  1. Kompilieren mit einer anderen Sprache, die eine andere Semantik für die Optimierung hat
  2. Wenn der Benutzer den DebuggableAttribute definiert, hat er Vorrang vor dem, was der C # -Compiler definiert
JaredPar 20.08.2010, 18:11
quelle
5

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.

    
Hans Passant 20.08.2010 18:44
quelle
3

Dieser Beitrag könnte Ihnen helfen Ссылка

Insbesondere können Sie in Ildasm nach dem DebuggableAttribute und der Abwesenheit von NOPs suchen.

    
Zaki 20.08.2010 18:11
quelle

Tags und Links