PROCESS_MEMORY_COUNTERS_EX?
-
Hy,
ich wollte mal fragen ob ihr wisst was die Struktur PROCESS_MEMORY_COUNTERS_EX an Infos beinhaltet, die Beschreibung in der MSDN(http://msdn.microsoft.com/en-us/library/ms684874(VS.85).aspx) hat mir leider überhaupt nicht geholfen. Ich bräuchte die CPU Auslastung und den belegten Arbeitsspeicher.
Danke schonmal für alle (konstruktiven) Antworten
-
Taskmanager?
-
Ja, Werte wie im Taskmanager, soll aber keiner werden!
Nur verstehe ich die Beschreibungen in der MSDN nicht, vll wäre einer so nett, der besser Englisch kann als ich, mir zu sagen wo ich in PROCESS_MEMORY_COUNTERS_EX die CPU Auslastung und den verbrauchten Speicher finden kann!
Danke schonmal für die Mühe
-
Schau mal, wenn du das hier alles nimmst
Members cb The size of the structure, in bytes. PageFaultCount The number of page faults. PeakWorkingSetSize The peak working set size, in bytes. WorkingSetSize The current working set size, in bytes. QuotaPeakPagedPoolUsage The peak paged pool usage, in bytes. QuotaPagedPoolUsage The current paged pool usage, in bytes. QuotaPeakNonPagedPoolUsage The peak nonpaged pool usage, in bytes. QuotaNonPagedPoolUsage The current nonpaged pool usage, in bytes. PagefileUsage The current space allocated for the pagefile, in bytes. Those pages may or may not be in memory. PeakPagefileUsage The peak space allocated for the pagefile, in bytes. PrivateUsage The current amount of memory that cannot be shared with other processes, in bytes. Private bytes include memory that is committed and marked MEM_PRIVATE, data that is not mapped, and executable pages that have been written to.
Und bei der Google-Übersetzer-Maschine (Englisch -> Deutsch) reinkopiert und auf "Übersetzen klickst" bekommst du das hier:
Mitglieder CB Die Größe der Struktur, in Bytes. PageFaultCount Die Zahl der Fehler-Seite. PeakWorkingSetSize Der Höhepunkt arbeiten festgelegte Größe in Bytes. WorkingSetSize Die aktuelle Arbeitsverzeichnis festgelegte Größe in Bytes. QuotaPeakPagedPoolUsage Der Höhepunkt ausgelagerten Pool-Nutzung, in Bytes. QuotaPagedPoolUsage Die derzeitige Nutzung ausgelagerten Pool, in Bytes. QuotaPeakNonPagedPoolUsage Der Höhepunkt Poolspeicher reservieren, Nutzung, in Bytes. QuotaNonPagedPoolUsage Die derzeitige Nutzung Poolspeicher reservieren, in Bytes. PagefileUsage Die aktuellen Speicherplatz für das Pagefile, in Bytes. Diese Seiten werden kann oder nicht im Speicher. PeakPagefileUsage Der Höhepunkt Speicherplatz für das Pagefile, in Bytes. PrivateUsage Die aktuelle Größe des Speichers, die sich nicht gemeinsam mit anderen Prozessen, in Bytes. Private Bytes enthalten Speicher, engagiert und markierte MEM_PRIVATE, Daten, die nicht zugeordnet, und ausführbare Seiten, die geschrieben wurden.
Ich denke mal das wirst du verstehen? Wenn dir das immer noch nicht reicht schaust du am besten mal in die FAQ ( http://www.c-plusplus.net/forum/viewtopic-var-t-is-86669.html ) da steht auch was zu.
Hoffe ich konnte dir helfen.
Gruß Tobi.
-
Alle angaben nur grob soweit ich das verstehe. Wahrscheinlich solltest Du Dir erstmal einen grundlagenartikel Windows-Speicherverwaltung reinziehen - leider kann ich keine (deutschen) empfehlen.
Members
cb
Größe der Struktur - vor deom Aufruf auf sizeof(PROCESS_MEMORY_COUNTERS_EX) setzenPageFaultCount
Anzahl von "page faults", d.h. wie oft wurde auf Daten zugegriffen, die im RAM erwartet, aber zur Zeit ausgelagert und erst wieder in denm RAM geladen werden müssen.PeakWorkingSetSize
Größtes während der Laufzeit aufgetretenes "Working Set" ....WorkingSetSize
akuelles Working Set, d.h. größe des Speichers, auf den im letzten Interval zugegriffen wurde.QuotaPeakPagedPoolUsage
The peak paged pool usage, in bytes. Siptzenwert von..QuotaPagedPoolUsage
Nutzung des "Paged Pool" - Das ist der bereich des physischen Speichers, der evtl. auf die Platte ausgelagert wird.QuotaPeakNonPagedPoolUsage
QuotaNonPagedPoolUsage
Non-Paged-Pool = physischer Speicher, der nicht ausgelagert wird. Hauptsächlich für Kernel-Treiber verwendet, die bestimmte Reaktionszeiten einhalten müssen.PagefileUsage
Im Pagefile genutzer Speicher. Für jede Speicherseite, die nicht explizit in den nonpaged pool geht, wird "backing store" in dere Auslagerungsdatei reserviert, damit der SPeicher bei bedarf ausgelagert werden kann.PeakPagefileUsage
Spitzenwert von vorigem.PrivateUsage
"Prozeß-Private" Bytes. Bestimmte Daten können zwischen verschiedenen Prozessen gemeinsam genutzt werden - z.B. DLLs und Executables. Privat ist, was nicht dazugehört.
-
Ich bin wahrscheinlich einfach zu dumm dazu, aber ich kann mit den Beschreibungen absolut nichts anfangen. Ich habe mir einfach mal alle Werte von einem Prozess anzeigen lassen, aber ich finde keinen, der nur annähernd mit dem aus dem TaskM übereinstimmt.
Mein Programm sagt:
PageFaultCount: 933
PeakWorkingSetSize: 3645440
WorkingSetSize: 3645440
QuotaPeakPagedPoolUsage: 88368
QuotaPagedPoolUsage: 87952
QuotaPeakNonPagedUsage: 2664
QuotaNonPagedPoolUsage: 2520
PagefileUsage: 1302528
PeakPagefileUsage: 1302528TaskM: 1.068K
peterchen schrieb:
Wahrscheinlich solltest Du Dir erstmal einen grundlagenartikel Windows-Speicherverwaltung reinziehen - leider kann ich keine (deutschen) empfehlen.
Könntest du mir den link geben, ich wills mal versuchen!
-
Ich hab' keins gefunden, das ich unbedingt empfehlen würde - aber die ersten sind zumindest nicht schlecht:
http://www.google.com/search?q=Windows+Memory+ManagementKurz, für 32-Bit-Systeme:
Jeder Prozeß hat 4GB virtuellen Adressraum - d.h. mögliche Adressen. Der Adressraum ist in Seiten (pages) von üblicherweise 4KB aufgeteilt.
Der Speichermanager kümmert sich um die Zuordnung zwischen virtuellem und physischem Speicher. Eine Seite ist "committed", wenn physischer Speicher für sie bereitsteht - nur dann kann an den entsprechenden Adressen gelesen und geschrieben werden.
Eine typische allokation (VirtualAlloc) erledigt also zwei Aufgaben: erstens, den entsprechenden Adreßraum zu reservieren, zweitens diesen Adressen physischen Speicher zuzuordnen.
Jeder Prozeß besitzt seinen eigenen virtuellen Adreßraum, der verfügbare physische Speicher muß zwischen diesen aufgeteilt werden.
Hinter einer Seite steht potentiell auch Plattenspeicher - z.B. ein 4KB-Segment der Auslagerungsdatei (page file oder swap file). Wenn der Speichermanager entscheidet, einem Prozeß A physischen Speicher "wegnehmen" zu müssen, werden die Daten in die Auslagerungsdatei geschrieben, und der Adreßbereich als "nicht lesbar/schreibbar" markiert. Die Seite ist "ausgelagert" (paged).
Wenn der Prozeß A jetzt auf die entsprechenden Adressen zugreift, steht kein physischer Speicher dahinter, der prozessor löst eine exception aus (page fault). Der Speichermanager behandelt diese exception indem er:
* dem Adreßbereich wieder physischen Speicher zuordnet
* Die Daten aus der Auslagerungsdatei einliest
* dem Prozessor zurückmeldet, den Zugriff noch einmal zu versuchen.-----------
So, mit den Informationen jetzt nochmal:
Page faults = Wie oft hat der prozeß versucht, gerade auf Speicher zuzugreifen, der ausgelagert wurde.
Non Paged Pool = physische Speicherseiten, die niemals ausgelagert werden, weil sie immer zur verfügung stehen müssen
Paged Pool = physische Speicherseiten, die ausgelagert werden dürfen(Non)PagedPool Usage: Speicherseiten, die für den Prozeßt im (non)paged pool liegen - ich glaube, dabei werden nur die Seiten gezählt, die zur Zeit "committed" sind.
Working Set: Speicherseiten, die kürzlich verwendet wurden.
Page File Usage: Teil der Auslagerungsdatei, die für den Prozeß verwendet wird.
-
Also müsste WorkingSetSize oder QuotaPagedPoolUsage+QuotaNonPagedPoolUsage der Wert im TaskM sein. Ist es aber nicht.
-
Schau mal unter:
http://msdn.microsoft.com/en-us/library/aa965225(VS.85).aspxDort ist aufgelistet woher jeder Eintrag aus dem Task-Manager kommt. Der gesammte verbrauchte Speicher für dein Prozess dürfte also workingSetSize sein. Nutze einfach die Tabelle und du kannst genau erkennen wo jede Information herkommt.
-
Schöner Link
Das Problem ist wahrscheinlich eher, das "verbrauchter Speicher" gar nicht so klar definiert ist.
flona: Wozu benötigst Du die Werte - bzw. wofür soll die Anzeige dienen?