2010-07-28 22 views
84

He visto el MSDN de Microsoft y toda la web, pero todavía no he podido obtener una buena idea de lo que es.¿Qué es "vinculación incremental"?

¿Significa que el programa completo carga archivos DLL en diferentes momentos durante su ejecución, como se aplicó a todos a la vez al iniciarse?

¿Estoy totalmente lejos? :)

Respuesta

97

Enlazar implica empaquetar juntos todos los archivos .obj creados a partir de sus archivos fuente, así como cualquier archivo .lib al que haga referencia, en su salida (por ejemplo, .exe o .dll).

Sin enlaces incrementales, esto tiene que hacerse desde cero cada vez.

El enlace incremental enlaza su exe/dll de una manera que hace que sea más fácil para el enlazador actualizar el exe/dll existente cuando realiza un pequeño cambio y vuelve a compilar.

Por lo tanto, la vinculación incremental solo hace que compilar y vincular su proyecto sea más rápido.

El único efecto de tiempo de ejecución que podría tener es que puede hacer que su exe/dll un poco más grande y más lento, tal como se describieron aquí:

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

Edit: Como se ha mencionado por Logan, la vinculación incremental es también incompatible con link time code generation - perdiendo así una posible optimización del rendimiento.

Es posible que desee utilizar el enlace incremental para compilaciones de depuración para acelerar el desarrollo, pero deshabilitarlo para versiones de lanzamiento para mejorar el rendimiento del tiempo de ejecución.

retardo cargado DLL puede ser lo que usted está pensando:

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

+0

¡Ah, pensé que los enlazadores siempre hacían esto de todos modos! Por lo tanto, al cerrar 'la vinculación incremental' hará que el enlazador enlace todo desde cero cada vez? – Russel

+6

"En la práctica, probablemente no valga la pena preocuparse por el efecto de esto". probablemente valga la pena mencionar que aunque la diferencia entre el enlace "normal" y el enlace incremental puede no ser tan bueno en cuanto a rendimiento en tiempo de ejecución, el enlace incremental es incompatible con la generación de código de tiempo de enlace que puede generar una diferencia de rendimiento drástica. –

+2

@Russel: Sí, lo hará. @Logan: Gracias, he actualizado mi respuesta. –

10

También, muy importante, enlace incremental es un requisito previo para Edit&Continue - eventualmente de editar el código y volver a compilar sobre la marcha, sin reiniciando

Así que es bueno tener compilaciones de depuración, pero no compilaciones de lanzamiento.

Cuestiones relacionadas