2010-07-28 5 views
84

Я посмотрел MSDN Microsoft и все вокруг сети, но я до сих пор не смог получить действительно хорошее представление о том, что это такое.Что такое «инкрементная привязка»?

Означает ли это, что заполненная программа загружает библиотеки DLL в разное время во время ее выполнения, как и все сразу после запуска?

Я полностью ушел? :)

ответ

97

Взаимосвязь включает в себя объединение всех файлов .obj, созданных из исходных файлов, а также любых файлов .lib, которые вы ссылаетесь, в свой вывод (например, .exe или .dll).

Без инкрементной привязки это нужно делать с нуля каждый раз.

Инкрементная ссылка связывает вашу exe/dll таким образом, чтобы упростить компоновщику обновление существующей exe/dll при небольших изменениях и повторной компиляции.

Таким образом, инкрементная привязка просто ускоряет сбор и связывание вашего проекта.

только во время выполнения эффект может иметь то, что это может сделать ваш EXE/DLL немного больше и медленнее, так как проделать описанное здесь:

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

Edit: Как упомянуто Logan, добавочное сшивание также несовместима с link time code generation - поэтому теряется возможная оптимизация производительности.

Возможно, вы захотите использовать инкрементную привязку для отладочных сборников для ускорения разработки, но отключите ее для создания релизов, чтобы повысить производительность выполнения.

Delay загружены библиотеки DLL, может быть то, что вы думаете:

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

+0

А, я думал, что линкеры всегда это делали! Итак, закрытие «инкрементной привязки» заставит компоновщика связывать все с нуля каждый раз? – Russel

+6

«На практике эффект от этого, вероятно, не стоит беспокоиться». вероятно, стоит упомянуть, что, хотя разница между «нормальным» связыванием и инкрементной привязкой может быть не такой высокой, как во время выполнения, инкрементная привязка несовместима с генерацией временного кода канала, что может привести к резкой разнице в производительности. –

+2

@ Russel: Да, будет. @Logan: Спасибо, я обновил свой ответ. –

10

Кроме того, весьма важно, добавочное звено является необходимым условием для Edit&Continue - possibily редактировать код и перекомпилировать его на лету, без повторный запуск.

Так что хорошо, что на отладочных сборках, но не на выпуск сборок.