ver a mi sugerencia formulada en Microsoft: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=511300
Usted debe votar por ella! Aquí está mi último comentario al respecto:
Sí, estamos usando enlaces incrementales para construir la mayoría de nuestros proyectos. Para los proyectos más grandes, es inútil. De hecho, lleva más tiempo vincular esos proyectos con enlaces incrementales (2min50 comparado con 2min44). Observamos que no funciona cuando el tamaño de los archivos ILK es grande (nuestro proyecto más grande genera una suerte de 262144 KB en la victoria 32).
Bellow, que lista otras cosas que tratamos de reducir el tiempo de enlace:
- explícita de instancias de plantilla para reducir la hinchazón de código. Pequeña ganancia.
- IncrediLink (IncrediBuild da ganancia interesante para la compilación pero casi no gana nada para el enlace).
- Elimina la información de depuración para bibliotecas que rara vez se depuran (buena ganancia).
- Eliminar el archivo PDB en «Evento de preconstrucción» (curiosamente da una ganancia interesante, por ejemplo: 2min44 en vez de 3min34).
- Convierte muchas bibliotecas estáticas a DLL. Ganancia importante
- Trabajar con una computadora equipada con mucha RAM para maximizar la memoria caché de disco. La mayor ganancia
- obj grande contra obj pequeño. Ninguna diferencia.
- Cambiar las opciones del proyecto (/ Ob1,/INCREMENTAL, Habilitar plegado de COMDAT, manifiesto de incorporación, etc.). Algunos dan ganancia interesante otros no. Intentamos maximizar continuamente nuestra configuración.
- Maximizar la vinculación interna vs Enlace externo. Es una buena práctica de programación.
- Separe el componente de software tanto como podamos. Puede trabajar en la prueba unitaria que enlace rápido. Pero aún tenemos que integrar las cosas juntas, tenemos código heredado y trabajamos con componentes de terceros.
- Utilice el conmutador de vinculador secreto/expectedoutputsize: 120000000. Pequeña ganancia.
Tenga en cuenta que para toda nuestra experimentación, medimos meticulosamente el tiempo de enlace. El tiempo de enlace lento implica un serio costo en productividad. Cuando implemente un algoritmo complejo o rastree un error difícil, querrá iterar rápidamente esta secuencia: modifique algún código, enlace, seguimiento de depuración, modifique algún código, enlace, etc.
Otro punto para optimizar el tiempo de enlace es el impacto que tiene en nuestro ciclo de integración continua. Tenemos muchas aplicaciones que comparten código común y estamos ejecutando una integración continua en él. El tiempo de enlace de todas nuestras aplicaciones tomó la mitad del tiempo de ciclo (15 minutos) ...
En el hilo https://blogs.msdn.microsoft.com/vcblog/2009/09/10/linker-throughput/, se hicieron algunas sugerencias interesantes para mejorar el tiempo de enlace. En una computadora de 64 bits, ¿por qué no ofrecer una opción para trabajar con archivos completamente en RAM?
De nuevo, cualquier sugerencia que pueda ayudarnos a reducir el tiempo de enlace es bienvenida.
¿Está usando muchas clases de plantilla? Tal vez están siendo instanciados varias veces, y esto no es necesario. –
¿GCC está utilizando librerías estáticas o bibliotecas compartidas? –
GCC está utilizando bibliotecas estáticas (.a). –