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