2009-04-26 8 views
2

Ich bin weiterhin meine saga zu Speicherverbrauch durch VB6-Anwendung zu verstehen. Die Option, die bisher am besten funktioniert, besteht darin, verschiedene Speichermetriken an wichtigen Punkten zur Laufzeit zu überwachen und zu verstehen, wo große Speicherfresser sind. Der Measure-Treiber, um dies zu studieren, ist zu verstehen, wie die Anwendungskalibrierung in Multi-User-Umgebung in Terminal Server (Citrix) aufgrund von Änderungen im Speicherverbrauch beeinflusst wird (in einfachen Worten mehr Speicher verwenden Sie weniger Benutzer, die Sie passen können) Server).Wie werden die Speichermesswerte des Process Explorer berechnet: WS Private, WS Shareable, WS Gemeinsame Spalten berechnet?

Ich kann die meisten Speichermetriken für den Prozess mit GetProcessMemoryInfo erhalten. Process Explorer meldet zusätzliche Metriken WS Private, WS Shareable, WS Shared - was für meine Untersuchung sehr interessant erscheint.

Also Frage ist, gibt es Standard/versteckte API, um diese Metrik für einen Prozess zu bekommen? Ich möchte diese Metriken programmatisch abfragen, damit ich sie während der Anwendungsausführung an wichtigen Stellen erfassen und die Speichernutzung besser verstehen kann.

Antwort

2

Siehe QueryWorkingSet-API. Dies sieht jedoch ziemlich unangenehm aus, da es Informationen pro Seite zurückgibt und es Ihnen daher überlassen würde, die Summen zu aggregieren. Wenn es eine bessere Methode gibt, hinterlasse bitte einen Kommentar und ich werde diese Antwort löschen.

Wenn Sie bestimmte Orte im Auge haben, an denen Sie Änderungen am Arbeitssatz überwachen möchten, sollten Sie sich die APIs InitializeProcessForWsWatch und GetWsChanges ansehen. Dadurch kann leichter festgestellt werden, wie viele Seiten fehlerhaft sind anstatt die gesamte vorher und nachher eingestellte Seite zu durchlaufen.