Frage

Ich habe einige außeremmehende Probleme mit einem 32-Bit-Prozess in Windows, in dem ich begonnen habe, den Leistungsmonitor zu verwenden, um bestimmte Zähler für diesen Prozess zu protokollieren.

Obwohl es normal ist, dass virtuelle Bytes höher sind als sowohl private Bytes als auch Arbeitssatz, stellte ich fest, dass es in meinem Fall einen wesentlichen Unterschied gab, virtuelle Bytes waren viel höher als sowohl private Bytes als auch Arbeitssatz.

Welche spezifischen Operationen und Win32/CRT -Funktionen (in C oder C ++) würden virtuelle Bytes erhöhen, aber keine privaten Bytes und Arbeitssatz?

Ich denke, es wären eine Art gemeinsame Ressourcen, wenn ich die Beschreibung der verschiedenen Zähler im Leistungsmonitor verstehe.


Da es anscheinend einige (zumindest) Verwirrung auf der Namenskonvention zu geben scheint, die für die Speicherzähler in verschiedenen Windows -Releases in verschiedenen Anwendungen in derselben Veröffentlichung von Windows verwendet werden soll, habe ich Folgendes zusammengestellt:

Informationen von msdn

Entsprechend MSDN - Speichergrenzen für Windows -Releases, Das virtuelle Benutzer-Speicherplatzlimit in 32-Bit-Fenstern für jeden 32-Bit-Prozess beträgt normalerweise 2 GB. Es kann bis zu 3 GB mit sein IMAGE_FILE_LARGE_ADDRESS_AWARE und 4GT.

Im Folgenden finden Sie eine Beschreibung der verschiedenen Zähler im Leistungsmonitor zusammen mit den entsprechenden Spalten im Task -Manager und der Win32 -Struktur, die die Informationen enthält, gemäß den Informationen MSDN - Speicherleistungsinformationen.

Virtuelle Bytes

Virtuelle Bytes ist die aktuelle Größe in Bytes des virtuellen Adressraums, den der Prozess verwendet. Die Verwendung des virtuellen Adressraums impliziert nicht unbedingt die entsprechende Verwendung von Festplatten- oder Hauptspeicherseiten. Der virtuelle Raum ist endlich und der Prozess kann seine Fähigkeit, Bibliotheken zu laden, einschränken.

Task Manager XP: N/A.
Task Manager Vista: N/A.
Struktur: MEMORYSTATUSEX.ullTotalVirtual-MEMORYSTATUSEX.ullAvailVirtual

Private Bytes

Private Bytes ist die aktuelle Größe in Bytes des Speichers, den dieser Prozess zugewiesen hat und der nicht mit anderen Prozessen geteilt werden kann.

Task Manager XP: VM -Größe
Task -Manager Vista: Größen Sie Commit
Struktur: PROCESS_MEMORY_COUNTERS_EX.PrivateUsage

Workingset

Der Arbeitssatz ist die aktuelle Größe in Bytes des Arbeitssatzes dieses Prozesses. Der Arbeitssatz ist der Satz von Speicherseiten, die kürzlich von den Threads im Prozess berührt wurden. Wenn der freie Speicher im Computer über einem Schwellenwert liegt, bleiben Seiten im Arbeitssatz eines Prozesses, auch wenn sie nicht verwendet werden. Wenn der freie Speicher unter einen Schwellenwert fällt, werden die Seiten aus Arbeitssätzen abgeschnitten. Wenn sie benötigt werden, werden sie weich in den Arbeitssatz zurückgeführt, bevor sie den Hauptspeicher verlassen.

Task Manager XP: MEM -Verwendung
Task Manager Vista: Arbeitssatz
Struktur: PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize

War es hilfreich?

Lösung

Dinge, die virtuelle Bytes erhöhen können, ohne private Bytes zu erhöhen, an die ich mich jetzt vorstellen kann:

  • Binärdateien werden oft geteilt (dh nicht privat), belegen aber einen erheblichen Adressraum. Dies kann sogar größer sein als die Größe des Binärs

  • Verwenden von Virtualalloc, um den sequentiellen Adressraum zu reservieren, ohne ihn zu begehen / zugreifen. Benutzerdefinierte Speichermanager könnten dies tun.

  • Verwenden einer von Speicher zugeordneten Datei (ohne vollständig darauf zugreifen)

Andere Tipps

Durch die Verwendung von Virtualalloc können Sie virtuellen Adressraum zuweisen, ohne einen physischen Speicher zuzuweisen. Das sollte die Anzahl der "virtuellen Byte" erhöhen, aber nicht Ihre Arbeitssatzgröße.

Das außer Speicher aus dem Speicherplatz verursacht werden, indem der Adressraum ausgeführt wird, da die Reserve zu viel Adressraum reserviert.

Was ist Ihre Programmiersprache?

In verwalteten Frameworks stellen private Bytes Daten dar, die durch nicht verwaltete Ressourcen zugewiesen werden. Virtuelle Bytes repräsentieren die Gesamtspeicherverwendung (nicht verwaltete und verwaltete Daten).

Daher ist es sehr häufig, wesentliche Unterschiede zwischen privaten und virtuellen Bytes in solchen Rahmenbedingungen zu erkennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top