webentwicklung-frage-antwort-db.com.de

Was ist "inkrementelle Verknüpfung"?

Ich habe mir MSDN von Microsoft und das gesamte Web angesehen, konnte mir aber immer noch keine wirklich gute Vorstellung davon machen, was es ist.

Bedeutet dies, dass das fertige Programm DLLs zu unterschiedlichen Zeitpunkten während der Ausführung lädt, wie dies beim Start für alle gleichzeitig gilt?

Bin ich total daneben? :)

99
Russel

Beim Verknüpfen werden alle aus Ihren Quelldateien erstellten OBJ-Dateien sowie alle von Ihnen referenzierten LIB-Dateien in Ihre Ausgabe (z. B. EXE oder DLL) gepackt.

Ohne inkrementelle Verknüpfung muss dies jedes Mal von Grund auf neu erfolgen.

Durch inkrementelles Verknüpfen wird Ihre exe/dll auf eine Weise verknüpft, die es dem Linker erleichtert, die vorhandene exe/dll zu aktualisieren, wenn Sie eine kleine Änderung vornehmen und neu kompilieren.

Das inkrementelle Verknüpfen beschleunigt also das Kompilieren und Verknüpfen Ihres Projekts.

Der einzige Runtime-Effekt, den es haben könnte, ist, dass es Ihre exe/dll etwas größer und langsamer machen könnte, wie hier beschrieben:

http://msdn.Microsoft.com/en-us/library/4khtbfyf.aspx

Bearbeiten: Wie von Logan erwähnt, ist inkrementelle Verknüpfung auch nicht kompatibel mit Link Timecode-Generierung - daher eine mögliche Leistungsoptimierung zu verlieren.

Möglicherweise möchten Sie die inkrementelle Verknüpfung für Debugbuilds verwenden, um die Entwicklung zu beschleunigen. Deaktivieren Sie sie jedoch für Releasebuilds, um die Laufzeitleistung zu verbessern.

Verzögerungsgeladene DLLs sind möglicherweise das, woran Sie denken:

http://msdn.Microsoft.com/en-us/library/151kt790.aspx

114
Saxon Druce

Außerdem ist eine inkrementelle Verknüpfung eine Grundvoraussetzung für Edit&Continue - Sie können Ihren Code jederzeit bearbeiten und neu kompilieren, ohne ihn neu starten zu müssen.

Es ist also eine gute Sache, über Debug-Builds zu verfügen, aber keine Release-Builds.

14
Cavaler