繁体   English   中英

Delphi IDE 冻结代码完成并跳转到声明

[英]Delphi IDE freezes on code completion and jumping to declaration

好的,所以这不是最佳实践情况,但幸运的是我有一个答案,所以请多多包涵。

我正在开发一个相当大的 Delphi 项目,其中使用了很多外部 API。 这些 API 以不同的方式插入,包括在 DPR 本身中封装到 IFDEF 中的单元,当它们依赖于平台时。 在 DPR 中使用 IFDEF 是一种不好的做法 - 当然,但是让项目树中列出的所有单元在它们之间切换(而不是在项目之间切换)很方便。

所以我在项目中添加了另一个替代的 API 实现,并且像往常一样 - 将现有的解决方案单元包装到{$IFDEF SOME_API_DLL}子句中,并将新的解决方案单元包装到另一个{$IFDEF SOME_API_EXE}中。

无论如何,我很快就注意到,IDE 在编码 3-5 分钟后就开始半随机冻结,这是无法承受的代价。IDE 会占用一个 CPU(例如 8 核 PC 上的 13%)。 我能够隔离出调用“自动完成”、“代码完成”(Ctrl+Space)和“跳转到声明(Ctrl+Click)”的原因。

主要问题是 - 什么可能导致 IDE 冻结如何解决这个问题?

我正在使用 Delphi XE8,但切换到其他版本并没有帮助。 不幸的是,由于第三方组件,无法测试/使用较新的 10.3+ 版本(声称重写了 Code Insight)。

由于该错误与新的 API 实现有很好的联系,我能够找到原因。 因此,IDE 似乎不喜欢带有 IFDEF 的 DPR 文件(旧消息),但真正令人遗憾的是IDE 仅在仅包装一个单元时才可以处理 IFDEF

解决方案的提示是项目树,它使用 DPR 中的单位自动更新,但它仅自动包含 IFDEF 之后的第一个单位。 显然,这也是自动完成的原因。

导致 IDE 在代码完成时冻结的错误 DPR 结构:

{$IFDEF EXTAI_API_DLL}
KM_ExtAI_DLL in 'src\KM_ExtAI_DLL.pas',
KM_ExtAI_DLLs in 'src\KM_ExtAI_DLLs.pas',
KM_ExtAI_SharedTypes in 'src\KM_ExtAI_SharedTypes.pas',
KM_ExtAI_SharedInterfaces in 'src\KM_ExtAI_SharedInterfaces.pas',
KM_ExtAIActions in 'src\KM_ExtAIActions.pas',
KM_ExtAIMaster in 'src\KM_ExtAIMaster.pas',
KM_ExtAIStates in 'src\KM_ExtAIStates.pas',
KM_ExtAIUtils in 'src\KM_ExtAIUtils.pas',
{$ENDIF}

良好的 DPR 结构,让 IDE 工作良好:

{$IFDEF EXTAI_API_DLL}KM_ExtAI_DLL in 'src\KM_ExtAI_DLL.pas',{$ENDIF}
{$IFDEF EXTAI_API_DLL}KM_ExtAI_DLLs in 'src\KM_ExtAI_DLLs.pas',{$ENDIF}
{$IFDEF EXTAI_API_DLL}KM_ExtAI_SharedTypes in 'src\KM_ExtAI_SharedTypes.pas',{$ENDIF}
{$IFDEF EXTAI_API_DLL}KM_ExtAI_SharedInterfaces in 'src\KM_ExtAI_SharedInterfaces.pas',{$ENDIF}
{$IFDEF EXTAI_API_DLL}KM_ExtAIActions in 'src\KM_ExtAIActions.pas',{$ENDIF}
{$IFDEF EXTAI_API_DLL}KM_ExtAIMaster in 'src\KM_ExtAIMaster.pas',{$ENDIF}
{$IFDEF EXTAI_API_DLL}KM_ExtAIStates in 'src\KM_ExtAIStates.pas',{$ENDIF}
{$IFDEF EXTAI_API_DLL}KM_ExtAIUtils in 'src\KM_ExtAIUtils.pas',{$ENDIF}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM