Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#35

AW: Ursache für dauerhafte CPU-Auslastung finden

  Alt 10. Feb 2021, 22:11
Findest irgendwo im Programmcode und Fremdkomponenten ein WM_NULL?
FMX/VCL (TPlatformWin/TApplication.WakeMainThread), Indy, OleControl's und paar Andere lösen ein WM_NULL aus, damit der Hauptthread z.B. die TThread.Synchronize verarbeitet.
In meinem Projekt habe ich das nicht gefunden. Bei den Komponenten habe ich WM_NULL bei Indy nur in Kommentaren gefunden (wird ohnehin nicht automatisch nach dem Programmstart verwendet). Aber theoretisch könnte es ja auch als "0" und nicht als "WM_NULL" im Quelltext irgendwo enthalten sein.

Normal ist relativ
WM_Null Messages kommen wohl normalerweise nicht so oft vor.[/url]
Dann anders formuliert: Können 33 Null-Messages pro Sekunde Grund für eine Auslastung von 2-3% auf einem logischen Prozessorkern sein?
Wenn ja, müsste das dann nicht jede Anwendung gleichermaßen betreffen? Messages werden nach meinem Verständnis normalerweise ja in jeder Anwendung empfangen und verarbeitet - selbst wenn nicht vom Entwickler explizit, dann dennoch vom Programmgrundgerüst für ganz normale Aktionen wie minimieren, etc.
Oder kann die Verwendung von HookMainWindow dazu führen?

Liegt dann vll. doch gar nicht an deinem Programm.
Ehrlich gesagt, finde ich das gar nicht so wichtig. Wenn die Ursache in meinem Programm liegt, würde ich natürlich gerne die Ursache beheben. Wenn die Ursache aber extern liegt, dann würde ich zumindest gerne die Auswirkungen beheben. Sollte es an den Messages liegen: Wenn jetzt plötzlich 330 statt 33 davon pro Sekunde eingehen, dann führt das zu einer Auslastung von 20-30%? Und bei 1000 Messages dann zum kompletten Lockup? Das kann es ja nicht sein.

Und wie gesagt: Ich sehe im Process Explorer ja, dass keine andere Anwendung dieses Verhalten zeigt. Die anderen Prozesse sind entweder konstant 0, ab und an kurz "< 0.01" oder es handelt sich tatsächlich um Prozesse, die etwas tun (Browser, AntiVirus, etc.).

Ich werde mich jetzt ein bisschen in AQTime einarbeiten und es morgen damit versuchen. Dennoch finde ich diese Analyse vorab sehr sinnvoll, um zu verstehen, was als Ursache überhaupt in Frage kommt. Hätte ja sein können, dass sich das auch so herausfinden und beheben lässt.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat