Ми отримуємо дуже повільний час компіляції, який може зайняти більше 20 хвилин на двоядерних 2GHz, 2G Ram машинах.
Багато цього пояснюється розміром нашого рішення, яке зросло до 70+ проектів, а також VSS, який є самим горловиною для пляшок, коли у вас багато файлів. (Заміна VSS не є варіантом на жаль, тому я не хочу, щоб це переходило в базу VSS)
Ми дивимося на об'єднання проектів. Ми також розглядаємо наявність декількох рішень, щоб досягти більшого відокремлення проблем та швидшого часу складання кожного елемента програми. Це, як я бачу, перетвориться на пекло DLL, коли ми намагатимемося підтримувати речі синхронно.
Мені цікаво дізнатися, як інші команди вирішили цю проблему масштабування, що ви робите, коли база вашого коду досягає критичної маси, яку ви витрачаєте половину дня, дивлячись на рядок стану доставки компілюючих повідомлень.
ОНОВЛЕННЯ Я знехтував згадати це рішення C #. Дякую за всі пропозиції C ++, але минуло кілька років, як мені довелося переживати за заголовки.
Редагувати:
Приємні пропозиції, які допомогли поки що (не кажучи, що немає інших приємних пропозицій нижче, лише те, що допомогло)
- Новий ноутбук 3 ГГц - потужність втраченої утилізації творить чудеса під час бігу до управління
- Вимкнути антивірус під час компіляції
- 'Відключення' від VSS (власне мережі) під час компіляції - я можу змусити нас повністю видалити інтеграцію VS-VSS і дотримуватися використання інтерфейсу VSS
Все ще не зривати хропіння через компіляцію, але кожен біт допомагає.
Оріон згадував у коментарі, що генерики також можуть мати гру. З моїх тестів, схоже, є мінімальна ефективність, але недостатньо висока, щоб впевнитись - час компіляції може бути невідповідним через активність диска. Через обмеження в часі мої тести не включали стільки дженериків чи стільки коду, скільки було б у живій системі, щоб вони могли накопичуватися. Я б не уникав використання дженериків там, де вони повинні використовуватися, лише для часу компіляції
РОБОТА
Ми перевіряємо практику побудови нових областей додатку в нових рішеннях, імпортуємо в найновіші DLL, якщо потрібно, інтегруючи їх у більш широке рішення, коли ми з ними задоволені.
Ми також можемо виконати їх із існуючим кодом, створивши тимчасові рішення, які просто інкапсулюють сфери, над якими нам потрібно працювати, і викинувши їх після реінтеграції коду. Нам потрібно зважити час, який знадобиться для реінтеграції цього коду до часу, який ми отримуємо, не маючи Rip Van Winkle, як досвід швидкого перекомпіляції під час розробки.