Delphi XE占用一个完整的核心(100%的CPU利用率)

时间:2011-05-31 09:20:40

标签: delphi delphi-xe delphi-ide

我的Delphi开始使CPU过热。一旦我开始使用Delphi,它就会为自己带来一个完整的核心,冷却器开始真正起作用。有什么办法可以解决这个问题吗?

我知道如果我一起使用“Delphi”和“bug”这两个词,Stack Overflow上的一些人会开始释放热量,但这是一个非常讨厌的bug,因为它会浪费很多精力(特别是在开启时)由于过热会使计算机过早老化。


更新

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


更新

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


更新

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

我找到了一种方法来重现问题,就像你的问题一样。创建一个新的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中的任何函数或代码并将其移动到另一个单元。代码完成,错误洞察或其他一些功能无情地重新解析此单元,这导致性能错误。

答案 2 :(得分:1)

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