Производительность завершения кода Delphi
У меня есть несколько больших (~ 600 тыс. строк кода) проектов Delphi. Они включают некоторые пользовательские компоненты, разработанные нашей командой.
Часто, когда я вызываю завершение кода с помощью ctrl + space или просто нажимая ".", среда IDE блокируется и долго думает. Иногда задержка может быть полной минутой или более. В других случаях он сразу же появляется с предложениями.
Какие факторы влияют на производительность intellisense в Delphi? Можно ли улучшить эту производительность?
Мое лучшее решение до сих пор заключается в отключении автоматического завершения и использовании ctrl + space, когда мне нужно медитировать спокойно в течение минуты или около того.
Я не могу не упомянуть, что VS2005, VS2008 и XCode все, кажется, дают практически мгновенную обратную связь с intellisense (хотя я никогда не пробовал это в проекте, это большое).
В качестве альтернативы Я предложил это предложение.
Ответы
Ответ 1
Обязательно укажите все единицы (*), используемые вашим проектом в dpr.
Не полагайтесь на путь поиска, чтобы найти единицу, вызванную с другого устройства, добавьте ее в dpr. Dpr будет намного дольше, но все связанные с компиляцией вещи будут быстрее, включая понимание кода.
(*) не единицы установленных компонентов.
Ответ 2
Delphi Code Insight вызывает библиотеку компилятора для выполнения пользовательской компиляции, когда пользователь запрашивает Code Insight (Ctrl + Space, '.' и т.д.). Этот пользовательский компилятор выполняет сборку в блоке и пропускает через codegen, linking и т.д., Пока не достигнет вашего текущего смещения в файловом буфере. Имея это в виду, список модулей, который видит компилятор до того, как он попадет в вашу текущую позицию, будет играть большую роль в определении скорости операции Code Insight. Может быть единица (или несколько единиц), которые вызывают здоровую зависимость файловой системы и т.д. Вполне возможно, что переупорядочение предложения uses, реорганизация предложения uses в нескольких файлах или удаление единиц в предложении uses, t, необходимый для компиляции вашего текущего устройства, может повысить производительность. Кроме того, использование пакетов или сокращение пути поиска вашего устройства может улучшить время ответа CI.
Ответ 3
Я не знаю, какую версию вы используете, но гораздо более быстрое завершение кода - это одна из вещей, которые мне больше всего нравятся в Delphi 2009.
Ответ 4
Это давняя проблема с Delphi, и мне пришлось прибегнуть к отключению автоматического завершения. Поработав так, я был очень доволен этим. Даже если это занимает всего лишь часть секунды, с задержкой IDE моя типизация была смущающей и прервала мой поток. Гораздо приятнее отключить автоматику, ИМО.
Ответ 5
Включите ли вы каталоги источников для ваших пользовательских компонентов вашей команды в путь к библиотеке? Было бы интересно увидеть разницу в скорости, если только файлы DCU компонента находятся в пути к библиотеке, а также там, где есть исходные файлы.
Ответ 6
Я сам столкнулся с этой проблемой, я исправил ее, удалив мертвую сетевую ссылку из моего пути библиотеки среды. Решила мою проблему на 100%.