![]() |
Ursache für dauerhafte CPU-Auslastung finden
Ich habe hier ein relativ großes Delphi-Projekt vor mir, wo das Programm minimiert im Tray ohne jegliche Aufgabe eine dauerhafte CPU-Auslastung von 0,1% - 0,2% im Task-Manager anzeigt (andere im Hintergrund laufenden Anwendungen haben 0%). Das mag erstmal nicht schlimm erscheinen, aber normalerweise ist das ein Zeichen dafür, dass irgendetwas nicht passt und dann an anderer Stelle Probleme machen könnte.
Ich frage mich nun, wie ich die Ursache herausfinden kann.
Oder komme ich irgendwie anders weiter? |
AW: Ursache für dauerhafte CPU-Auslastung finden
AQTime?
Ein Thread hat auch einen Parent-Thread. Ich glaub der PE sollte dazu auch was anzeigen. Mit etwas Glück wurde auch der Stacktrace beim Erstellen des Threads gespeichert, so sieht man dann wer den Thread erstellt hat und bekommt so die Antwort wofür der Thread sein soll. |
AW: Ursache für dauerhafte CPU-Auslastung finden
Hallo, das ist mir auch schon aufgefallen. Ging vor gut einem Monat los. Ich denke ein Windowsupdate oder der Windows Defender sind schuld an der höheren CPU last. Es sind auch nicht nur Delphi Programme betroffen.
Für... Zitat:
![]() |
AW: Ursache für dauerhafte CPU-Auslastung finden
Zitat:
![]() Wo kriege ich denn eine funktionierende Standard Version für 10.3 her? Zitat:
Zitat:
Delphi-Quellcode:
Wenn man es irgendwie noch besser und komplett entfernen könnte, bitte sagen!
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} Ich habe den Teil dann testweise auskommentiert und neu kompelliert, um auszuschließen, dass genau dieses Entfernen etwas damit zu tun hat, aber das CPU-Ergebnis war das gleiche. Lediglich die Exe ist um 10% angewachsen. Deine verlinkten Infos sind sehr interessant, aber ich weiß nicht, ob mich das weiterbringt: Ich kann nicht auf eine Delphi-Version vor XE5 wechseln und es handelt sich bei mir nicht um eine DLL. System.Rtti wird im Projekt nirgends eingebunden. Wahrscheinlich durch irgendeine andere System-Unit oder Komponente. Die einzige dort empfohlene Option wäre, die System.Rtti zu bearbeiten und den TMethodImplementationIntercept Teil (oder nur die exports Zeile?) auszukommentieren. Das erscheint mir ein bisschen wie mit der Brechstange. Gibt es vielleicht noch irgendeinen anderen Ansatz? Wenn wirklich Rtti Schuld ist, dann Rtti irgendwie komplett aus dem Projekt verbannen? |
AW: Ursache für dauerhafte CPU-Auslastung finden
Darf deine Anwendung auch etwas tun?
0,1% - 0,2% ist doch gar nichts. Deshalb nach einen angeblichen Fehler zu suchen ist etwas suspekt. just my 2 cent! |
AW: Ursache für dauerhafte CPU-Auslastung finden
Zitat:
Wenn das jeder Prozess im Hintergrund so tun würde, dann wäre die CPU dauerhaft ausgelastet. Alle anderen inaktiven (Hintergrund-)Prozesse sind ja konstant bei 0%. Warum dann meiner nicht? Warum ist das ein "angeblicher" Fehler? Eine Anwendung, die nichts tut und nicht sichtbar ist, darf nicht dauerhaft CPU-Leistung fordern. Zudem musst Du bedenken, dass die Angabe 0,2% bei (in meinem Fall) 8 Kernen und damit 16 logischen Prozessoren, einen davon zu 3,2% auslastet. Ohne etwas zu tun wohlgemerkt. |
AW: Ursache für dauerhafte CPU-Auslastung finden
Irgendwo hast du ja einen "Idle" Loop drinnen, der auf eine Eingabe wartet um aktiv zu werden. Was passiert denn da in dem Loop genau?
|
AW: Ursache für dauerhafte CPU-Auslastung finden
procmon?
Vielleicht bekommt die App Windows-Botschaften von ausserhalb. |
AW: Ursache für dauerhafte CPU-Auslastung finden
Zitat:
Und ich habe natürlich keinen Idle-Loop, der auf eine Eingabe wartet, sonst wüsste ich ja, wo das Problem zu suchen ist. Falls irgendsowas in einer Delphi-Unit drin ist, wäre ja genau das herauszufinden. |
AW: Ursache für dauerhafte CPU-Auslastung finden
Glaskugel sagt: Du hast einen externen Thread, der mit Sleep(...) in Dauerschleife läuft und irgendwas pollt/pollen soll.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz