Wir haben sehr langsame Kompilierungszeiten, die auf Dual-Core-2-GHz- und 2-G-Ram-Maschinen mehr als 20 Minuten dauern können.
Ein Großteil davon ist auf die Größe unserer Lösung zurückzuführen, die auf über 70 Projekte angewachsen ist, sowie auf VSS, das ein Flaschenhals für sich ist, wenn Sie viele Dateien haben. (Das Austauschen von VSS ist leider keine Option, daher möchte ich nicht, dass dies zu einer VSS-Bash wird.)
Wir wollen Projekte zusammenführen. Wir streben auch mehrere Lösungen an, um eine bessere Trennung der Bedenken und schnellere Kompilierungszeiten für jedes Element der Anwendung zu erreichen. Ich kann sehen, dass dies eine Hölle für DLLs wird, wenn wir versuchen, die Dinge synchron zu halten.
Ich bin interessiert zu wissen, wie andere Teams mit diesem Skalierungsproblem umgegangen sind. Was tun Sie, wenn Ihre Codebasis eine kritische Masse erreicht, die Sie den halben Tag damit verschwenden, zu beobachten, wie die Statusleiste Kompilierungsnachrichten übermittelt.
UPDATE Ich habe es versäumt zu erwähnen, dass dies eine C # -Lösung ist. Vielen Dank für alle C ++ - Vorschläge, aber es ist ein paar Jahre her, seit ich mir Gedanken über Header machen musste.
BEARBEITEN:
Nette Vorschläge, die bisher geholfen haben (ohne zu sagen, dass es unten keine anderen netten Vorschläge gibt, nur was geholfen hat)
- Neuer 3-GHz-Laptop - die Leistung der verlorenen Nutzung wirkt Wunder, wenn es um das Management geht
- Deaktivieren Sie Anti Virus während des Kompilierens
- 'Trennen' von VSS (eigentlich dem Netzwerk) während des Kompilierens - Ich kann uns veranlassen, die VS-VSS-Integration vollständig zu entfernen und bei der Verwendung der VSS-Benutzeroberfläche zu bleiben
Immer noch nicht durch eine Kompilierung schnupfen, aber jedes bisschen hilft.
Orion erwähnte in einem Kommentar, dass Generika auch ein Stück haben könnten. Aus meinen Tests geht hervor, dass es nur einen minimalen Leistungseinbruch gibt, der jedoch nicht hoch genug ist, um sicherzugehen, dass die Kompilierungszeiten aufgrund der Disc-Aktivität inkonsistent sein können. Aus zeitlichen Gründen enthielten meine Tests nicht so viele Generika oder Code, wie im Live-System angezeigt würden, sodass sich diese möglicherweise ansammeln. Ich würde es nicht vermeiden, Generika dort zu verwenden, wo sie verwendet werden sollen, nur um die Leistung bei der Kompilierung zu gewährleisten
Umgehung
Wir testen die Praxis, neue Anwendungsbereiche in neuen Lösungen zu erstellen, die neuesten DLLs nach Bedarf zu importieren und sie in die größere Lösung zu integrieren, wenn wir mit ihnen zufrieden sind.
Wir können sie auch für vorhandenen Code verwenden, indem wir temporäre Lösungen erstellen, die nur die Bereiche zusammenfassen, an denen wir arbeiten müssen, und sie nach der Wiedereingliederung des Codes wegwerfen. Wir müssen die Zeit abwägen, die für die Wiedereingliederung dieses Codes benötigt wird, gegen die Zeit, die wir gewinnen, wenn wir keine Rip Van Winkle-ähnlichen Erfahrungen mit der schnellen Neukompilierung während der Entwicklung haben.