So optimieren Sie Gebäude-Geschwindigkeit in visual studio 2008
Könnte jemand mir Tipps geben zu erhöhen, Gebäude-Geschwindigkeit in visual studio 2008?
Ich habe ein großes Projekt mit vielen Modul mit voller Quelle. Jedes einzelne mal, wenn Sie aufgebaut wird, alle Dateien sind wieder aufgebaut, einige von Ihnen wurden nicht verändert. Kann ich verhindern, dass diese Datei neu erstellt werden?
Ich drehte die Eigenschaft "Enable Minimal rebuild" /Gm auf, aber der compiler warf diese Warnung
Command line warning D9030 : '/Gm' is incompatible with multiprocessing; ignoring /MP switch
Alle Tipps zur Erhöhung der Gebäude-Geschwindigkeit wird mir helfen, viel.
Danke,
- Sagen Sie, dass Sie - erstellen, ändern Sie nichts, und bauen alles wieder neu kompilieren Zeug?
- Xoreax Incredibuild, zwar nicht Billig, hilft eine Menge. Wir erhalten regelmäßig Beschleunigungen von > 10x.Das heißt, kaputte Abhängigkeiten immer noch sehr weh, weil es zwingt, eine teure verknüpfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine einfache Möglichkeit ist das kompilieren im debug-Modus(aka null-Optimierungen), dies ist natürlich nur für interne Tests.
können Sie auch vorkompilierte Header verwenden* um die Bearbeitung zu beschleunigen, oder den Bruch der 'unveränderliche' Segmente in statische libs, entfernen diese aus dem neu kompilieren.
*mit
/MP
Sie brauchen, um das vorkompilierte header, bevor Sie Multiprozess-Zusammenstellung, wie/MP
Lesen, aber nicht schreiben laut MSDNC++ kompilieren mal ein Kampf für jedes Projekt ab einer bestimmten Größe. Zum Glück, mit so vielen Leuten schreiben großer C++ - Projekte gibt es eine Vielzahl von Lösungen:
Den klassischen Billig-Lösung ist die "Einheit erstellen". Dies bedeutet nur mit
#include
alle Ihre .cpp-Dateien in einer einzigen Datei für die Kompilierung. "Einheit erstellen" hat sich in einer Reihe von Fragen auf stackoverflow, hier ist die größte, die ich bin mir dessen bewusst. Diese screencast zeigt, wie Sie eine solche erstellen Sie in Visual Studio.Mein Verständnis ist, dass die Einheit baut viel schneller als klassische baut, weil Sie effektiv den cache-Arbeit erfolgt durch den Präprozessor und linker. Ein Nachteil, um die Einheit zu bauen, ist, dass, wenn Sie berühren Sie eine cpp-Datei, die musst du neu kompilieren "großen" cpp-Datei. Umgehen kannst du dies, indem er die cpp-Datei, die Sie überarbeiten, aus der Einheit bauen und kompilieren Sie es auf seine eigene.
Jenseits von Einheit baut, hier ist eine Liste meiner best-practices:
#include
nur, wenn nötig, lieber forward-Deklaration#include
Aussagen#pragma once
an der Spitze der header-Dateien statt#ifndef __FOO_H #define __FOO_H ... #endif
, wenn Sie die#ifndef
trick der compiler öffnen Sie die header-Datei jedes mal, wenn es enthalten ist,#pragma once
kann der compiler effizienterWenn du tust alle, die (die Einheit aufzubauen, wird der größte Unterschied, in meiner Erfahrung), die Letzte option ist die verteilte Gebäude. distcc ist die beste Kostenlose Lösung, die ich bin mir bewusst, incredibuild ist die proprietäre Industrie-standard. Ich bin der Meinung, dass distributed computing ist der einzige Weg, um große iteration mal aus dem unordentlichen C++ Kompilierung. Wenn Sie Zugang zu einer relativ großen Anzahl von Maschinen (sagen wir mal 10-20) das ist absolut lohnt ein Blick in. Ich sollte erwähnen, dass die Einheit baut und verteilte builds sind nicht vollständig mutualistischen, weil eine traditionelle kompilieren kann aufgeteilt werden in kleinere Einheiten, als eine Einheit bauen. Wenn Sie möchten, zu gehen, verteilt es sich wahrscheinlich nicht lohnen, eine Einheit zu bauen.
Enable Minimal Build
:/Gm
ist unvereinbar mitBuild with Multiple Processes
:/MP{<cores>}
So können Sie nur einen dieser zwei auf einmal.
Auch um zu verhindern, dass unnötige builds (von unberührten Dateien) - strukturieren Sie Ihren code richtig; Folgen Sie dieser Regel:
Können Sie weitere Informationen über die Struktur des Projekts und die Dateien werden neu erstellt?
Unverändert C++ - Dateien können neu erstellt werden, denn Sie enthalten header-Dateien, die geändert wurden, in diesem Fall /Gm-option wird nicht helfen,
Wiederaufbau alle Dateien nach änderung einer header-Datei ist ein häufiges problem. Die Lösung ist genau zu prüfen, was #include Ihre header-Dateien und entfernen Sie alle, die entfernt werden können. Wenn Ihr code verwendet nur Zeiger und Referenzen auf eine Klasse, können Sie ersetzen Sie
mit