Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [HELP] CPU / RAM AUslastung eines Prozesses auslesen (https://www.delphipraxis.net/164686-%5Bhelp%5D-cpu-ram-auslastung-eines-prozesses-auslesen.html)

Novo 24. Nov 2011 20:36

[HELP] CPU / RAM AUslastung eines Prozesses auslesen
 
Hallo Community,

es gibt viele Beiträge und "Lösungen" rund um das Thema CPU und RAM Auslastung auszulesen.
Habe nun mehrere Ausprobiert (Taskmanager, TShellExecuteInfo, CpuUsage.pas), jedoch zeigen mir die alle falsche Werte sowohl bei CPU und RAM Auslastung an.
Wenn Windows Taskmanager sagt, Auslastung kontinuierlich bei 10% - 15%, sagt mir mein Code 24%, 30% etc. an.
Auch bei der RAM Auslastung sind es immer einige bis 100 MB mehr.

Benutze Delphi 7 auf Windows 7 x64.
Kommen die nicht mit MultiCores zurecht oder was ist das Problem?

Also ich möchte per Delphi Programm ein Prozess starten und mir dessen CPU / RAM Auslastung anzeigen.
Das Handle von hProcess habe ich.

Delphi-Laie 24. Nov 2011 22:34

AW: [HELP] CPU / RAM AUslastung eines Prozesses auslesen
 
Zitat:

Zitat von Novo (Beitrag 1137763)
Hallo Community,

es gibt viele Beiträge und "Lösungen" rund um das Thema CPU und RAM Auslastung auszulesen.
Habe nun mehrere Ausprobiert (Taskmanager, TShellExecuteInfo, CpuUsage.pas), jedoch zeigen mir die alle falsche Werte sowohl bei CPU und RAM Auslastung an.
Wenn Windows Taskmanager sagt, Auslastung kontinuierlich bei 10% - 15%, sagt mir mein Code 24%, 30% etc. an.
Auch bei der RAM Auslastung sind es immer einige bis 100 MB mehr.

Woher willst Du denn wissen, daß das, was der Taskmanager anzeigt, richtig ist (darauf basiert ja letztlich Deine Unkorrektheitsbehauptung)? Ist ein originales Windowsprogramm der Koordinatenursprung der Welt für Dich? Für mich nicht.

Wenn ich den Taskmanager und den Prozeßexplorer (auch der wird immerhin von Winzigweich angeboten) gleichzeitig laufen lasse, so sind deren angezeigten Werte auch nicht gleich, zumal sie auch anscheinend zu unterschiedlichen Zeitpunkten aktualisiert werden. Warum also externe Programme, die sich letztlich auch nur massiv der API bedienen, zweitklassig sein sollen, erschließt sich mir nicht.

Novo 25. Nov 2011 00:33

AW: [HELP] CPU / RAM AUslastung eines Prozesses auslesen
 
Hmm das ist ein Argument.
Bin davon ausgegangen dass das, was der Windows Taskmanager anzeigt stimmt.
Aber warum werden unterschiedliche RAM Auslastung Werte angezeigt? Unterschied von über 100MB bei der Firefox.exe, das ist keine Aktualisierungsgeschwindigkeit Toleranz mehr.
Zumal die Gesamtauslastung meiner Quadcore CPU nun wirklich nicht stimmen kann. (Taskmanager und Sidebar Gadget sagen 4%, Delphi Tool meint mal 30% dann 45% dann 20% etc.)

Satty67 25. Nov 2011 01:07

AW: [HELP] CPU / RAM AUslastung eines Prozesses auslesen
 
Alles eine Frage der Interpretation...

CPU-Last:

Momentane Last bei Abruf, Durchnitt, Median oder Peek seit letztem Abruf. Alleine die Liste gibt 4 stark unterschiedliche Werte.

Speicher:

Code, Stack, Heap, Windows-Objekte (Handles, GDI), DLLs... je nachdem was man mit in die Bewertung nimmt, kann das auch ganz schön abweichen.

jaenicke 25. Nov 2011 01:21

AW: [HELP] CPU / RAM AUslastung eines Prozesses auslesen
 
Was hast du denn im Taskmanager ausgewählt? Privater Arbeitssatz (was der Standard ist), Arbeitssatz, ...? Im Standard wird nämlich nur der Arbeitsspeicher angezeigt, der exklusiv von dem Prozess verwendet wird, nicht aber der, den der Prozess zwar nutzt, aber der nicht als MEM_PRIVATE markiert ist.

Diesen privaten Arbeitssatz bekommst du mit GetProcessMemoryInfo und PROCESS_MEMORY_COUNTERS_EX (in PrivateUsage, im Gegensatz zum WorkingSetSize, das den gesamten Arbeitssatz enthält), nicht mit PROCESS_MEMORY_COUNTERS.
http://msdn.microsoft.com/en-us/libr.../ms684874.aspx

Bei Mehrkernprozessoren gibt es was die CPU-Auslastung angeht verschiedene Berechnungsmethoden. Der Taskmanager rechnet diese um auf alle vier Kerne. Die meisten Quelltexte, die ich kenne, rechnen hingegen pro Kern, so dass du durch die Anzahl der Kerne teilen musst um auf die selben Werte zu kommen.
Beim Process Explorer kann ich mir die kumulierten Werte für alle Kerne nicht so recht erklären. Die einzelnen Kerne stimmen aber mit dem Taskmanager von Messungenauigkeiten abgesehen überein.

Sir Rufo 25. Nov 2011 05:30

AW: [HELP] CPU / RAM AUslastung eines Prozesses auslesen
 
Die Auslastung eines Prozesses (RAM, CPU) bekommt man auch über WMI

http://theroadtodelphi.wordpress.com...i-–-processes/

s.h.a.r.k 25. Nov 2011 06:29

AW: [HELP] CPU / RAM AUslastung eines Prozesses auslesen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1137777)
Die Auslastung eines Prozesses (RAM, CPU) bekommt man auch über WMI

http://theroadtodelphi.wordpress.com...i-–-processes/

Würde im Moment wohl zu Beginn meiner Suche auch immer bei theroadtodelphi nachschauen, wenn ich Informationen vom System bekommen will. Dort gibt es massig Code for die Abfrage über WMI, selbst einen Code-Creator ist dort zu finden, wobei ich leider nicht sagen kann, ob der was taugt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz