2

私のDelphiはCPUを過熱し始めました。私がDelphiを起動するとすぐに、それ自体が完全なコアを必要とし、クーラーは本当に一生懸命働き始めます。これを修正するためのトリックはありますか?

「Delphi」と「bug」という言葉を一緒に使用すると、Stack Overflowの一部の人が高温の蒸気を放出し始めることを知っていますが、これは(特にバッテリーの場合)多くのエネルギーを浪費するため、非常に厄介なバグです。過熱により、コンピュータが早期に古くなります。


アップデート:

この問題は、アクティブなタブがプロジェクト(dproj)ファイルである場合にのみ発生します。別のファイル(pas)に切り替えるとすぐに、CPUは0%〜1%に戻ります。これはすべてのdprojファイルで発生しますが、IDEが画面に表示されている場合にのみ発生します(タスクバーに最小化されていません)。したがって、これは明らかにレンダリングのバグです。


アップデート:

ウォーレンPが同様のバグを生成する方法を見つけたようです。彼の答えを見てください。


アップデート:

この問題は非常に大きなPASユニットでも発生しますが、Delphi IDEウィンドウをバックグラウンド(未使用)で3〜5分間放置すると、最大CPU使用率が表示されます。ウィンドウをタスクバーに最小化するか、別のIDEタブに切り替えることで、問題を解決できます。

4

3 に答える 3

7

追加した可能性のあるDelphiIDEのプラグインを削除してみてください。特定のプロジェクトまたはソースファイルでのみ発生するかどうかを確認してください。デバッガーを使用してDelphiプロセスに侵入し、呼び出しスタックが何であるかを確認します。そうすれば、Delphiのどの部分がCPUを回転させているかがわかります。

于 2011-05-31T09:23:45.637 に答える
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に直接ある関数やコードを含むその他の複雑な構文を見つけて、それを別のユニットに移動することです。コードの完了、エラーの洞察、またはその他の機能のいずれかがこのユニットを絶え間なく再解析しているため、パフォーマンスのバグが発生しています。

于 2011-06-01T17:56:46.640 に答える
1

「プロセスモニター」ユーティリティを使用して、bds.exeの動作を確認しました。より多くの.dcuが処理されることがわかりました。(ファイルを開く、ファイルを読み取る、ファイルを閉じる)。修正するために、すべての.dcuを削除しました

于 2011-12-20T14:12:17.667 に答える