Почему скорость компиляции Delphi снижается, чем дольше он открыт, и что я могу с этим поделать?

Моя компания более десяти лет работает над большим проектом на 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?

p.s. Мы также знаем, что разделение проекта на пакеты времени выполнения может сократить время компиляции. Но по причинам развертывания и администрирования мы стараемся избегать использования пакетов времени выполнения.

36
задан Rob Kennedy 5 July 2011 в 13:19
поделиться