Estamos obtendo tempos de compilação muito lentos, que podem levar mais de 20 minutos em máquinas de 2GHz e 2G de núcleo duplo.
Muito disso se deve ao tamanho da nossa solução, que cresceu para mais de 70 projetos, bem como ao VSS, que é um gargalo em si quando você tem muitos arquivos. (trocar o VSS não é uma opção, infelizmente, por isso não quero que isso desça para um bash do VSS)
Estamos olhando para mesclar projetos. Também estamos procurando ter várias soluções para obter uma maior separação de preocupações e tempos de compilação mais rápidos para cada elemento do aplicativo. Isso eu vejo que se tornará um inferno de DLL, à medida que tentamos manter as coisas sincronizadas.
Estou interessado em saber como outras equipes lidaram com esse problema de dimensionamento. O que você faz quando sua base de código atinge uma massa crítica que você está desperdiçando metade do dia assistindo à barra de status entregar mensagens de compilação.
ATUALIZAÇÃO Eu esqueci de mencionar que esta é uma solução C #. Obrigado por todas as sugestões de C ++, mas já faz alguns anos que eu tenho que me preocupar com cabeçalhos.
EDITAR:
Boas sugestões que ajudaram até agora (sem dizer que não há outras boas sugestões abaixo, apenas o que ajudou)
- Novo laptop de 3GHz - o poder da utilização perdida faz maravilhas ao buscar gerenciamento
- Desativar o antivírus durante a compilação
- 'Desconectando' do VSS (na verdade, a rede) durante a compilação - posso remover a integração do VS-VSS por completo e continuar usando a interface do usuário do VSS
Ainda não ronca através de uma compilação, mas tudo ajuda.
Orion mencionou em um comentário que os genéricos também podem ter uma peça. Dos meus testes, parece haver um impacto mínimo no desempenho, mas não alto o suficiente para garantir - os tempos de compilação podem ser inconsistentes devido à atividade do disco. Devido a limitações de tempo, meus testes não incluíram tantos genéricos ou código, como apareceriam no sistema ativo, para que possam acumular-se. Eu não evitaria usar genéricos onde eles deveriam ser usados, apenas para desempenho em tempo de compilação
GAMBIARRA
Estamos testando a prática de criar novas áreas do aplicativo em novas soluções, importando as dlls mais recentes, conforme necessário, integrando-as à solução maior quando estivermos felizes com elas.
Também podemos fazer o mesmo com o código existente, criando soluções temporárias que apenas encapsulam as áreas em que precisamos trabalhar e as descartamos após a reintegração do código. Precisamos ponderar o tempo necessário para reintegrar esse código contra o tempo que ganhamos por não ter Rip Van Winkle como experiências com recompilação rápida durante o desenvolvimento.