【问题标题】:Delphi XE takes one full core (100% CPU utilization)Delphi XE 占用一个完整内核(100% CPU 利用率)
【发布时间】:2011-05-31 09:20:40
【问题描述】:

我的 Delphi 开始使 CPU 过热。一旦我启动 Delphi,它就会为自己占用一个完整的核心,并且冷却器开始非常努力地工作。有什么技巧可以解决这个问题吗?

我知道如果我同时使用“Delphi”和“bug”这两个词,Stack Overflow 上的一些人会开始释放热气,但这是一个非常讨厌的错误,因为它会浪费大量能量(尤其是在打开时)电池),并且会因过热而使计算机过早老化。


更新:

仅当活动选项卡是项目 (dproj) 文件时才会出现此问题。一旦我切换到另一个文件 (pas),CPU 就会回到 0%-1%。它发生在任何 dproj 文件中,但仅当 IDE 在屏幕上可见时才会发生(未最小化到任务栏)。所以这显然是一个渲染错误。


更新:

看起来 Warren P 找到了产生类似错误的方法。看看他的回答。


更新:

我看到这个问题也出现在一个非常大的 PAS 单元上,但是在我让 Delphi IDE 窗口在后台(未使用)3-5 分钟后出现最大 CPU 利用率。我可以通过将窗口最小化到任务栏或切换到另一个 IDE 选项卡来解决它。

【问题讨论】:

  • 启动后会无限期地继续吗?
  • 任何 .dproj 文件,还是只是一个特定的文件?
  • 嗨布鲁斯。好问题。请参阅(第二次)更新。
  • @Andreas - 不幸的是,这是一台 Qosmio X505 笔记本电脑。我无法更改它,因为它仍在保修期内。但是大冷柜/小冷柜,我觉得不正常。对吗?
  • 开个玩笑.. 不,100% CPU 不“正常”。我用我的 XE 检查了它,CPU 负载几乎一直接近于零。我唯一的想法是切换代码洞察/错误洞察,也许您的项目存在问题。 (在早期版本的 Delphi 中有这个...)

标签: delphi delphi-xe delphi-ide


【解决方案1】:

尝试删除您可能添加的任何 Delphi IDE 插件。尝试查看它是否仅发生在特定项目或源文件上。使用调试器闯入 Delphi 进程并查看调用堆栈是什么。这样你可能会看到 Delphi 的哪个部分正在旋转 CPU。

【讨论】:

  • 两周前(第一次)安装了我的 Delphi。在我完成代码移植(今天)之前,我没有安装任何插件。
  • 第三方组件祭坛呢?把它们都拿出来,直到找到能做到这一点的那个。
  • 我确实有第 3 方 VCL。我会尝试看看这是否能解决问题。
【解决方案2】:

我找到了一种重现与您的问题非常相似的问题的方法。创建一个新的 delphi 项目并向 .DPR(主项目源)添加一个 ifdef 条件,其中包含一些不会解析的类似代码...

program IdeTestProject1;
{$ifdef FOO}
bar
{$endif}

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  Application.Run;
end.

因此我的建议是找到所有条件编译指令和其他复杂的语法,包括直接在 DPR 中的任何函数或代码,并将其移至另一个单元。代码完成、错误洞察或其他一些功能正在无情地重新解析这个单元,这会导致性能错误。

【讨论】:

  • 所以,我没疯。它真的发生了!谢谢沃伦。
  • 所以我的答案可能是正确的(关闭代码洞察/错误洞察),但被删除了......
  • 是的,安德烈亚斯。我的猜测是,每次更改文本缓冲区的内容时都会触发错误洞察,但在极端错误情况下,解析会因未捕获的异常而中止,并且“脏位”未被清除,从而导致无休止的级联解析和高 CPU 使用率。
  • 嗯,我的库正在使用中 - 因此它编译得很好,没有警告和提示。但是“我认为你对代码洞察/错误洞察引起的问题是正确的。
  • 您是否尝试从您的 dpr 中删除 IFDEF 和其他预编译器指令?
【解决方案3】:

我使用“进程监视器”实用程序并检查了 bds.exe 操作。我发现处理了更多的 .dcu。 (打开文件,读取文件,关闭文件)。 为了修复,我删除了所有 .dcu

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多