Ich habe ein veraltetes C ++ - Projekt, das sehr lange dauert (einige Minuten, sogar für kleine inkrementelle Änderungen), und ich fand heraus, dass die meiste Zeit damit verbracht wurde, zu verlinken.
Das Projekt verwendet bereits vorkompilierte Header und inkrementelle Kompilierung. Ich habe den Befehlszeilenparameter "/ time" in der Hoffnung aktiviert, dass ich mehr Details darüber erhalten würde, was den Linker verlangsamt, und habe die folgende Ausgabe erhalten:
%Vor%Gibt es eine Möglichkeit, mehr über jeden dieser Schritte zu erfahren? Zum Beispiel würde ich gerne herausfinden, ob sie die meiste Zeit damit verbringen, auf eine bestimmte .lib- oder .obj-Datei zu verlinken.
Gibt es auch eine Dokumentation, die erklärt, was jeder dieser Schritte tut?
Der Schritt "MD Merge" sucht nach doppelten Zeichenfolgenliteralen und anderen duplizierten Daten und führt sie zusammen. Beachten Sie, dass die dafür erforderliche Zeit O (n ^ 2) über die Anzahl der Zeichenfolgenliterale beträgt. Daher hatte ich einmal ein ähnliches Problem, bei dem eine Headerdatei mit ~ 10K Stringliteralen 5 Minuten zum Verknüpfen benötigte.
Das Hinzufügen des Linker-Flags /OPT:NOICF
kann helfen. Überprüfen Sie alternativ, warum Sie so viele Literale zu falten haben.
Hoffentlich würde jemand vom vs dev-Team dies sehen und in der Lage sein, einen Kommentar zu schreiben, vielleicht einen Link zu ihrem Forum / Blog zu veröffentlichen und das beste zu veröffentlichen?
Die erste zufällige Theorie, die zu mir kommt, wäre zu untersuchen, wie viel In-Header-Code erzeugt wird, so dass "Phase 1" so viel Arbeit zur Beseitigung von Dupes hätte. Ich denke speziell an Template- oder Makro- oder alte Konstanten-Deklarationen. Diese würden auch durch Einbeziehung in einen gemeinsamen vorkompilierten Header aggregiert werden, wie ich sehr oft mit naiven Einstellungen für Windows / MFC / STL unter Verwendung von Projekten gesehen habe.
Viel Glück, es wäre toll zu hören, wenn Sie etwas Besonderes finden, das schlecht ist.
Tags und Links c++ visual-c++ linker