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