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