Моя компания уже более десяти лет работает над большим проектом на Delphi.Наша кодовая база росла на протяжении многих лет и сейчас насчитывает около 4 миллионов строк кода.Скорость компиляции становится проблемой.Мы потратили время на отсеивание циклических ссылок на блоки (известная причина медленной компиляции) и изучили каждый аспект установки.Достигается тот момент, что мы не можем его существенно улучшить с помощью того, что можем контролировать.
В настоящий момент на современном ПК с 4 ядрами, работающими под управлением Windows XP SP3 и Delphi 2006, запустите Delphi.свежая и полная сборка, это занимает ~ 40 сек.Затем, если мы немедленно сделаем еще одну полную сборку в том же сеансе Delphi, это займет 1 м 40 с.Сделайте еще одну полную сборку еще раз, будет хуже.И так далее.
(Мы хорошо знаем, что Windows сама кэширует файлы, и это сильно влияет на скорость компиляции. Приведенные выше цифры основаны на том, что файлы кэшируются. Мы создали такой сценарий с помощьюзаставить Delphi скомпилировать проект один раз, завершить его, а затем начать новый сеанс Delphi. Таким образом, хотя 40 секунд не кажется медленным, это только потому, что файлы кэшируются Windows. И мы делаем это для того, чтобы получить яблокоСравнение с яблоком.)
Что нас удивляет, так это скорость компиляции.(В прошлом мы наблюдали, что замедление было хуже, если в проекте было много циклических ссылок на единицы.) Если мы завершим Delphi и начнем новый сеанс, время компиляции вернется к 40 секундам.Еще более интересная вещь, которую мы наблюдали, заключается в том, что мы можем добиться такого же «улучшения» скорости, нажав кнопку «Отмена», чтобы прервать компиляцию, а затем сразу выполнить полную сборку.Время компиляции также вернется к 40 секундам.
Нам кажется, что собственный кеш зависимостей Delphi не так эффективен, как создание его с нуля, и со временем он ухудшается.И также появляется кнопка Отмена, как-то очищает этот кеш.Мы думаем, что если мы сможем подключиться к подсистеме IDE Delphi, которая выполняет эту очистку, мы всегда сможем поддерживать скорость компиляции на пиковой производительности.Но мы не знаем, как.
Кто-нибудь знает, что мы можем сделать?
Мы все еще используем Delphi 2006, поскольку мы еще не нашли реальный способ перенести наш большой проект наUnicode.Я читал на форумах, что последняя версия Delphi XE демонстрирует похожую проблему скорости компиляции с циклическими ссылками.Кто-нибудь знает, справился ли Delphi XE с проблемой?
ps Нам также известно, что разбиение проекта на пакеты времени выполнения может сократить время компиляции.Но из соображений развертывания и администрирования мы стараемся избегать использования пакетов времени выполнения.