Formas de acelerar o tempo de compilação? (C # / C ++ não gerido)
Pergunta
Um aplicativo legado que eu estou trabalhando em currenty leva ~ 2 horas para construir. O projecto tem cerca de 170 projectos com 150 ou de modo a ser não gerido C ++ e o outro de 30 C # Net 2.0.
O que são algumas sugestões sobre formas de melhorar o tempo de construção para algo assim?
Solução
foco no C ++ projectos -. Eles são quase garantida a ser os maiores drenos de tempo para a construção
Algumas dicas sobre como tirar o C ++ tempo de construção para baixo:
- Certifique-se que você só está incluindo cabeçalhos que você precisa nos projetos C ++!
- Use declarações para a frente sempre que possível nos cabeçalhos ao invés de incluir outros cabeçalhos
- Use a opção / MP para construir em paralelo, quando possível
- Use abstração efetivamente
- Esteja poupar no uso de funções inline, uma vez que estes custos mais em tempo de compilação
- Obter as dependências corretas, então você não está construindo mais frequentemente que necessário
- Uso cabeçalhos pré-compilado apropriadamente
Além de que, se você está falando 2 vezes horas construir, muitas vezes há uma solução simples, barata (de uma forma grande imagem), assim:
- Atualize seu hardware para ajudar a reduzir os tempos de computação
Outras dicas
Se você instalar IncrediBuild em cada máquina que precisa construí-lo, ele distribui o processo de construção entre todos das máquinas. Se você realmente quiser jogar apenas hardware para o problema, você pode configurar algumas máquinas dedicadas que servem apenas como clientes IncrediBuild.
Em uma escala diferente, faça cabeçalhos certeza que todos os seu projeto tem pré-compilados configurado corretamente.
Você pode experimentar o sistema de compilação distribuída IncrediBuild: http://www.xoreax.com/visual_studio. htm
Você pode usar uma ferramenta como fiapos para ver se você tem redundante incluir arquivos em projetos de seu c ++.
Há também um ótimo artigo sobre este assunto em Jogos de dentro .
Faça múltiplas soluções para o projeto que incluem apenas subconjuntos relevantes dos projectos e deixar uma solução super para lançamentos etc.