RAM Verbrauch eines Prozesses auslesen?

01/19/2014 03:31 falaga#16
Ich werde mal schauen, ob die Werte proportional bei einem einzelnen Prozess sind, also wenn der Arbeitsspeicher steigt.


Edit: Die Differenz zwischen dem Wert durch die Funktion und dem Wert im Task Manager lag immer bei 60.000-70.000 (mit metin2client.exe getestet). Nun kann ich mein eigentliches Programm nochmal weiter ausbauen, danke für deine großartige Hilfe!
01/19/2014 12:22 alpines#17
Bei mir ist kein Unterschied trotz Admin-Rechten, oder was war deine Frage?
01/19/2014 12:27 KDeluxe#18
Du hast im Taskmanager mehrere Anzeigemöglichkeiten. Betreffend des RAMs hast du sechs Optionen, nicht nur eine. Standardmäßig wird dir aber nur eine der sechs Optionen angezeigt, dieser gibt aber nicht den tatsächlichen Arbeitsspeicherverbrauch wieder, sondern den vom Prozess exklusiv verwendeten Speicher. Die Funktion ProcessGetStats() gibt dir schon den richtigen Wert zurück.
01/19/2014 15:23 falaga#19
Quote:
Originally Posted by KDeluxe View Post
Du hast im Taskmanager mehrere Anzeigemöglichkeiten. Betreffend des RAMs hast du sechs Optionen, nicht nur eine. Standardmäßig wird dir aber nur eine der sechs Optionen angezeigt, dieser gibt aber nicht den tatsächlichen Arbeitsspeicherverbrauch wieder, sondern den vom Prozess exklusiv verwendeten Speicher. Die Funktion ProcessGetStats() gibt dir schon den richtigen Wert zurück.
Ich habe bereits die anderen Optionen durchprobiert, ohne Erfolg. Die Antworten die ich da bekam hatten nicht annähernd etwas mit dem Verbrauch, er um Taskmanager angezeigt wird zu tun.
01/21/2014 16:38 KDeluxe#20
Vielleicht habe ich mich einfach nicht verständlich genug ausgedrückt. Also noch einmal:
Du hast im Task-Manager mehrere Anzeigeoptionen betreffend des Arbeitsspeichers. Sechs in der Zahl. Das was du siehst ist nur eine der sechs Optionen. Dieser Wert zeigt aber nur den physikalisch genutzten Arbeitsspeicher an, den NUR der Prozess verwenden kann. Die tatsächliche Arbeitsspeicherverwendung liegt höher, es gibt allerdings auch gemeinsam genutzten Arbeitsspeicher.
Die Funktion ProcessGetStats() gibt dir den tatsächlich genutzten Wert zurück, dabei spielt es keine Rolle, ob es sich dabei um den privaten Arbeitsspeicher oder den gemeinsam genutzten Arbeitsspeicher geht. Diesen Wert kannst du dir auch im Taskmanager anzeigen.

Hier mal ein konkretes Beispiel:
Code:
$mem = ProcessGetStats("explorer.exe")
If IsArray($mem) Then
    MsgBox(64, "Info", _
        "WorkingSetSize: " & Int($mem[0] / 1024) & " K" & @CRLF & _
        "PeakWorkingSetSize: " & Int($mem[1] / 1024) & " K")
EndIf
Ausgabe:
Quote:
WorkingSetSize: 70392 K
PeakWorkingSetSize: 72008 K
Taskmanager:
[Only registered and activated users can see links. Click Here To Register...]

Du suchst momentan allerdings den privat genutzten Arbeitsspeicher (in diesem Beispiel "19.584 K"). Das einfachste wäre, wenn du dir im Taskmanager die zusätzliche Spalte anzeigen lässt und mit diesem Wert arbeitest. Alternativ kannst du natürlich auch googlen, wie du den vom Prozess privat genutzten Arbeitsspeicher herausfinden kannst. Aus Erfahrung kann ich dir allerdings schon sagen, dass der "PrivateUsage" Wert der Struktur [Only registered and activated users can see links. Click Here To Register...] nicht dem angezeigten Wert des privaten Arbeitsspeichers im Taskmanager entspricht.