Я работаю над большим проектом delphi 6 с довольно большим количеством зависимостей. Для составления всего проекта требуется несколько минут. Повторная компиляция после нескольких изменений иногда намного дольше, поэтому быстрее Delphi завершает работу, стирает все файлы dcu и перекомпилирует все.
Кто-нибудь знает способ определить, что делает компилятор медленнее и медленнее? Любые советы по организации кода для повышения производительности компилятора?
Я уже пробовал следующие вещи:
- Явно включать большинство единиц в dpr вместо того, чтобы полагаться на путь поиска: он ничего не улучшил.
- Используйте компилятор командной строки dcc32: он не быстрее.
- Попробуйте посмотреть, что делает компилятор (используя ProcessExplorer из SysInternals): видимо, большую часть времени он выполняет функцию под названием "KibitzGetOverloads". Но я не могу ничего сделать с этой информацией...
РЕДАКТИРОВАТЬ, Резюме ответов до сих пор:
Ответ, который работал лучше всего в моем случае:
- Функция "Очистить неиспользуемые единицы ссылок" от cnpack. Он почти автоматически очищает более 1000 ссылок, делая "холодную" компиляцию примерно в 2 раза быстрее. ( "холодная" компиляция = стереть все файлы dcu перед компиляцией). Он получает список ссылок из компилятора. Поэтому, если у вас есть {$ IFDEF}, убедитесь, что все ваши конфигурации все еще компилируются.
Следующее, что я хотел бы попробовать:
- Рефакторинг ссылок на единицы вручную (в конечном итоге с использованием абстрактного класса)
но это гораздо больше работы, так как мне сначала нужно определить, где проблемы. Некоторые инструменты, которые могут помочь:
- GExperts добавляет браузер зависимостей проекта к IDE delphi (но, к сожалению, он не может отображать размер каждой ветки)
- Delphi Unit Dependency Viewer V1.0 делает примерно то же самое, но без Delphi. Он может вычислять некоторые простые статистические данные (какие единицы являются наиболее ссылочными,...)
- Icarus, на который ссылается ссылка в одном ответа.
Вещи, которые ничего не меняли в моем случае:
- Помещение всех файлов из моей программы и всех компонентов в одну папку без подпапок.
- Дефрагментация диска (я попытался с помощью ramdisk)
- Использование ramdisk для источника кода и выходных папок.
- Отключение активного антивирусного сканирования
- Список всех единиц в файле dpr вместо того, чтобы полагаться на путь поиска.
- Использование компилятора командной строки dcc32 или ecc32.
Вещи, которые не применимы к моему делу:
- Избегайте зависимости от сетевых ресурсов.
- Используя DelphiSpeedUp, потому что у меня уже было это.
- Использование одной папки для всех dcu (я всегда это делаю)
Вещи, которые я не пробовал:
- Переход на другую версию Delphi.
- Использование dcc32speed.exe
- Использование твердотельного диска (я его не пробовал, но я попытался использовать ramdisk, где я поместил весь исходный код. Но, возможно, мне тоже нужно было установить delphi на ramdisk)