web-dev-qa-db-de.com

Vorteile der Option "Code optimieren" in Visual Studio Build

Ein Großteil unseres C # -Versionscodes besteht aus der Option "Code optimieren", die deaktiviert ist. Ich glaube, das bedeutet, dass Code, der im Release-Modus erstellt wurde, einfacher debuggt werden kann.

Angesichts der Tatsache, dass wir eine relativ einfache Desktopsoftware erstellen, die eine Verbindung zu den Back-End-Web-Services herstellt (dh keine besonders prozessorintensive Anwendung), was ist dann, wenn irgendeine Art von Leistungseinbußen zu erwarten ist?

Und ist es wahrscheinlich, dass eine bestimmte Plattform stärker betroffen ist? Z.B. Multiprozessor/64 Bit.

28
g t

Die vollständigen Details finden Sie unter http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx .

In Kürze...

In verwaltetem Code führt der JITter in der Laufzeit nahezu die gesamte Optimierung durch. Der Unterschied in der generierten IL von dieser Flagge ist ziemlich klein.

14
Zian Choy

Sie sind die einzige Person, die die Frage "Leistungstreffer" beantworten kann. Versuchen Sie es auf beide Arten, messen Sie die Leistung und sehen Sie, was passiert. Der Treffer könnte enorm sein oder gar nicht existieren; Niemand, der dies liest, weiß, ob "enorm" für Sie eine Mikrosekunde oder zwanzig Minuten bedeutet.

Wenn Sie daran interessiert sind, welche Optimierungen der C # -Compiler ausführt (und nicht Jitter), wenn der Optimierungsschalter aktiviert ist, lesen Sie die folgenden Informationen:

http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx

29
Eric Lippert

In der Tat gibt es einen Unterschied, der manchmal ganz erheblich ist. Was kann die Leistung wirklich beeinflussen (da dies von JIT nicht vollständig übernommen wird):

  • Unnötige lokale Variablen (d. H. Größere Stack-Frames für jeden Aufruf)
  • Zu generische Bedingungsanweisungen werden von JIT auf einfache Weise übersetzt.
  • Unnötige Verzweigung (auch von einer JIT nicht gut bedient - schließlich hat sie nicht allzu viel Zeit, um alle intelligenten Optimierungen durchzuführen)

    Wenn Sie also etwas numerisches tun, aktivieren Sie die Optimierung. Ansonsten sehen Sie überhaupt keinen Unterschied.

6
SK-logic

Die vom Compiler durchgeführten Optimierungen sind relativ niedrig und sollten die Benutzererfahrung nicht beeinträchtigen.

Wenn Sie die Optimierung Ihrer Anwendung quantifizieren möchten, erstellen Sie einfach ein Profil für einen nicht optimierten und einen optimierten Build, und vergleichen Sie die Ergebnisse.

2
Ben S

Ich finde, dass mit komplexem, CPU-intensivem Code (der Code, den ich verwende, eine Monte-Carlo-Simulation ist, die genug Threads erzeugen kann, um einen Computer zu 100% zu nutzen. Dies wurde in einer 36-Core-Umgebung getestet). Der Performance-Treffer kann bis zu 4 betragen mal höher! Eine Simulation, die 2 Stunden dauert, dauert ohne Optimierungsflag etwa 9 Stunden. (Die Pfade sind ungefähr 500.000 und für jeden Pfad gibt es 500 Schritte für ungefähr 2000 verschiedene Objekte mit hochkomplexen Berechnungen für jedes Objekt).

0
Alex Lin