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
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.
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. Read Committed Vs wiederholbare Lesevorgänge in MySQL?
- 2. Kafka nicht committed Nachrichten
- 3. .NET 3.5 vs. .NET 3.0
- 4. Symfony 1.4 Doktrin: Data-Dump reserved Worte
- 5. qmake Language reserved Wort Problem (glaube ich)
- 6. .NET: Arraylist vs Liste
- 7. ReportViewer vs CrystalReport .NET
- 8. .net: System.Web.Mail vs System.Net.Mail
- 9. .NET - Wörterbuchverriegelung vs. ConcurrentDictionary
- 10. .Net Remoting vs. WCF
- 11. VS .NET-Klassendesigner
- 12. .NET Teilklassen vs. Vererbung
- 13. vs String in .NET
- 14. .Net Lokalisierung vs Branding
- 15. .Net vs C++ (Leistung)
- 16. .NET // vs /// Kommentare Konvention
- 17. UTC vs. GMT - Java vs. .Net
- 18. .NET Standard Library vs. .NET Standard
- 19. angebracht Prozessfehler VS C++ .NET
- 20. Baugruppen vs Class Libraries (.NET)
- 21. . NET-Erweiterungsmethoden vs Utility-Klassen
- 22. String-Vergleich in .Net: "+" vs "-"
- 23. Dienstprogrammklasse vs Unterklasse. NET-Steuerelemente
- 24. .Net Hashtable - Enthält vs ContainsKey
- 25. Error Logging FoxPro vs .Net
- 26. .NET: Starke Namensgebung vs. Authenticode
- 27. .NET Stack vs Windows-Stack
- 28. == vs. Object.Equals (Objekt) in .NET
- 29. .NET String Verkettung (+ & + =) vs. StringBuilder
- 30. Excel Roundup vs .NET Math.Round
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
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