Производительность завершения кода Delphi [закрыто]

StackOverflow https://stackoverflow.com/questions/898327

Вопрос

У меня есть несколько больших (около 600 тыс. строк кода) проектов Delphi.Они включают в себя некоторые пользовательские компоненты, разработанные нашей командой.

Часто, когда я вызываю завершение кода с помощью Ctrl+Пробел или просто нажимая «.», IDE зависает и долго думает.Иногда задержка может составлять целую минуту и ​​более.В других случаях он сразу же появляется с предложениями.

Какие факторы влияют на производительность intellisense в Delphi?Могу ли я как-нибудь улучшить эту производительность?

На данный момент мое лучшее решение — отключить автоматическое завершение и использовать Ctrl+пробел, когда мне нужно спокойно помедитировать в течение минуты или около того.

Я не могу не упомянуть, что VS2005, VS2008 и XCode, кажется, дают практически мгновенную обратную связь intellisense (хотя я никогда не пробовал ее на таком большом проекте).

Как альтернатива, Я предложил это предложение.

Это было полезно?

Решение

Обязательно укажите все единицы измерения (*), используемые вашим проектом, в файле dpr.
Не полагайтесь на путь поиска, чтобы найти юнит, вызванный из другого юнита, добавьте его в dpr.DPR будет намного длиннее, но все, что связано с компиляцией, будет быстрее, включая анализ кода.

(*) не единицы установленных компонентов.

Другие советы

Delphi Code Insight вызывает библиотеку dll компилятора для выполнения пользовательской компиляции, когда пользователь запрашивает Code Insight (Ctrl+Пробел, '.' и т. д.).Эта пользовательская компиляция выполняет сборку модуля и пропускает генерацию кода, связывание и т. д., пока не достигнет текущего смещения в файловом буфере.Имея это в виду, список модулей, который видит компилятор до того, как он достигнет вашей текущей позиции, будет играть важную роль в определении скорости работы Code Insight.Возможно, существует модуль (или несколько модулей), вызывающий сильную зависимость файловой системы и т. д.Вполне возможно, что изменение порядка раздела «uses», рефакторинг раздела «uses» для размещения в нескольких файлах или удаление модулей из раздела «uses», которые не нужны для компиляции текущего модуля, могут повысить производительность.Кроме того, использование пакетов или сокращение пути поиска объектов может улучшить время ответа CI.

Я не знаю, какую версию вы используете, но гораздо более быстрое завершение кода — это одна из вещей, которые мне больше всего нравятся в Delphi 2009.

Это давняя проблема Delphi, и мне пришлось прибегнуть к отключению автоматического завершения.Поработав таким образом некоторое время, я был очень доволен этим.Даже если это занимает всего лишь долю секунды, из-за задержки IDE мой набор текста сбивал меня с толку и прерывал мой поток.С выключенной автоматикой, имхо, гораздо приятнее.

Я сам столкнулся с этой проблемой и исправил ее, удалив неработающую сетевую ссылку из пути к библиотеке моей среды.Решил мою проблему на 100%.

Включаете ли вы каталоги исходного кода для пользовательских компонентов вашей команды в путь к библиотеке?Было бы интересно увидеть разницу в скорости, если в пути к библиотеке находятся только файлы компонентов DCU, а также если там же находятся исходные файлы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top