Codeoptimierung
Aktualisiert: November 2007
Optimierung bezieht sich auf die Feinabstimmung der Anwendung, um höchstmögliche Leistung zu erzielen und den Codeumfang möglichst gering zu halten. Visual C++ bietet die folgenden Mechanismen für die Codeoptimierung:
Pragmas und Schlüsselwörter, die Sie in den Quellcode einfügen können.
Compileroptionen zur Unterstützung der Optimierung; siehe Compileroptionen nach Kategorien sortiert.
Optimieren der Programmleistung
Detaillierte Informationen darüber, in welchem Umfang die Programmleistung durch bestimmte Programmiertechniken verbessert werden kann, finden Sie unter:
Informationen zur Codeoptimierung
Da der vom Compiler erstellte Code durch die Optimierung geändert wird, sollten Sie den Code am besten optimieren, nachdem er vollständig getestet und gedebuggt wurde. So können Sie Code debuggen, der dem Quellcode weitestgehend entspricht, und brauchen sich nicht um die Auswirkungen der Optimierung zu kümmern. Nachdem Sie die Optimierungen durchgeführt haben, sollte der Code erneut getestet werden. Nach der Durchführung einer Optimierung kann es vorkommen, dass sich das Codeverhalten ändert. In diesem Fall könnte es erforderlich sein, optimierten Code zu debuggen. Weitere Informationen finden Sie auch unter Häufig auftretende Probleme beim Erstellen eines Releasebuild
Wenn optimierter Code unterschiedlich reagiert, liegt dies nicht an einem Fehler, sondern vielmehr daran, dass die Reihenfolge der Rechenoperationen durch die Optimierung geändert wird, was sich aufgrund der Beschränkungen der Gleitkommagenauigkeit in leicht abweichenden Ergebnissen niederschlägt.
Möglicherweise werden auch einige zusätzliche Warnmeldungen angezeigt, wenn Sie Code mit implementierter Optimierung kompilieren. Dieses Verhalten ist normal, da einige Warnungen sich nur auf optimierten Code beziehen. Indem Sie diese Warnungen berücksichtigen, können Sie bereits die meisten Probleme im Zusammenhang mit der Optimierung ausschließen.
Wenn Sie ein Programm für Geschwindigkeit optimieren, kann es widersinnigerweise dazu kommen, dass der Code langsamer ausgeführt wird. Dies liegt daran, dass der Codeumfang durch einige Optimierungen zunimmt. Durch Inlinefunktionen wird z. B. die Systembeanspruchung durch Funktionsaufrufe eliminiert, aber das Inlining zu großer Codebereiche lässt die Programmgröße derart anwachsen, dass auch die Anzahl der Seitenfehler im virtuellen Speicher zunimmt. Die durch fehlende Funktionsaufrufe gewonnene Geschwindigkeit kann also durch Speicherauslagerungen wieder zunichte gemacht werden. Aus diesem Grund empfiehlt es sich, die Programmleistung vor und nach der Durchführung von Optimierungen zu testen. Allgemeine Richtlinien zur Anwendungsoptimierung finden Sie unter Empfohlene Vorgehensweisen für die Optimierung.
Das optimize-Pragma
Wenn ein Codeabschnitt Fehler oder eine Verlangsamung infolge der Optimierung verursacht, können Sie die Optimierung mit dem optimize-Pragma für diesen Abschnitt deaktivieren. Schließen Sie den Code wie folgt in zwei Pragmas ein:
#pragma optimize("", off)
// some code here
#pragma optimize("", on)
Weitere Themen
Weiterführende Themen zur Optimierung:
Weitere Informationen über das schnellere Laden von DLL-Methoden finden Sie im Artikel "Optimizing DLL Load Time Performance" in der Kolumne "Under the Hood" von "MSDN Magazine" in der MSDN Library.
Weitere Informationen über das Minimieren der Auslagerung in Anwendungen finden Sie in den Artikeln "Improving Runtime Performance with the Smooth Working Set Tool" und "Improving Runtime Performance with the Smooth Working Set Tool—Part 2" in der Kolumne "Bugslayer" von "MSDN Magazine" in der MSDN Library.