2009-06-14 25 views
2

Mein Programm hat 7.667.712 Bytes Commit-Heap, aber es hat 33.546.240 reservierte Heap-Bytes! Ich kann sehen, dass das Programm etwa 44 MB private Bytes verwendet. Wie kann ich mit dem .NET-GC weniger Speicherplatz für den verwalteten Heap reservieren?.NET Committed vs. Reserved Heap-Größe

Antwort

3

Die einfachste Antwort ist, dass Sie nicht können. Der .Net GC ist selbst abgestimmt, er reserviert den Speicher eifrig, speichert jedoch nicht den Speicher, bis er benötigt wird, wenn der Speicher nicht mehr benötigt wird, wird er wieder reserviert.

Der GC uncommit Speicher, wenn hoher Speicherdruck auf der Maschine vorhanden ist.

33 MB ist nicht so groß, da standardmäßig (wenn Ihr Prozess 32 Bit ist und Sie den Workstation-GC-Modus ausführen) ein Standardsegment für den Small Object Heap reserviert ist, das 16 MB ist.

6

Nur weil Ihr Prozess Speicher reserviert hat, heißt das nicht, dass er diesen Speicher verwendet.

Unter Windows bedeutet reservierter Speicher, dass Ihr Prozess Seiten in seinen Adressraum zugeordnet hat. Physischer Speicher wird zugewiesen, indem diese reservierten Seiten festgeschrieben werden. Natürlich verwenden Sie diesen Speicher nicht unbedingt, da die festgeschriebenen Seiten in die Auslagerungsdatei ausgelagert werden können, wodurch vorübergehend der zugrunde liegende physische Speicher freigegeben wird.

Kurz gesagt, dies ist nichts, worüber man sich (allgemein) Sorgen machen muss. Was ist das Problem, das Sie versuchen zu lösen?

+1

Ich weiß, was verpflichtet und reserviert bedeutet. Das Problem ist, dass Benutzer sich häufig über die hohe Speichernutzung von .NET-Anwendungen beschweren, und das möchte ich irgendwie verbergen. – wj32

+0

Der Benutzer sollte sich um die physische Speichernutzung kümmern (committed), und nicht reserviert, Sie kümmern sich normalerweise um reservierten Speicher, wenn Sie hohen Arbeitsspeicherdruck haben, oder wenn Sie virtuellen Adressraum ausführen. Der Prozess kann nur 1 GB Speicher mit ZERO-Effekt für die Leistung reservieren. – mfawzymkh