Delphi XE采用一个完整内核(100%CPU使用率)

 2021-04-27 

Delphi XE takes one full core (100% CPU utilization)

我的Delphi开始使CPU过热。一旦我开始使用Delphi,就需要一个完整的内核,并且散热器会开始非常努力地工作。有什么技巧可以解决此问题?

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

更新:

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

更新:

像沃伦·帕(Warren P)这样的人已经找到了产生类似错误的方法。查看他的答案。

更新:

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


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


我找到了一种非常类似于您的问题的重现问题的方法。创建一个新的delphi项目,并将一个ifdef条件添加到.DPR(主项目源)中,该条件包含诸如此类的无法解析的代码...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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中的所有函数或代码,然后将其移至另一个单元。代码完成,错误洞察或某些其他功能会不断地重新解析此单元,这会导致性能错误。


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