1. Wird der Garbage Collector aufgerufen, wenn Gen 0 und Gen 1 nicht unter Druck stehen? Wenn in Generation0
und Generation2
genügend Speicherplatz vorhanden ist, wird Garbage Collector nicht aufgerufen.
Wenn in Generation0
und Generation2
genügend Speicherplatz vorhanden ist, bedeutet dies, dass genug Platz vorhanden ist, um neue Objekte zu erstellen, und es gibt keinen Grund, Garabage Collection auszuführen.
2. Wird es zu Gen 2 gehen, wenn es Gen 0 oder Gen 1 Speicher freigegeben hat?
Wenn das Objekt nach dem Garbage Collection in Generation1
und in den Generation1
überlebt, dann wird das Objekt Generation2
bewegt werden.
3. Wenn ja, was ist der bessere Weg, damit umzugehen?
Um ein Objekt aus Haufen zu zerstören, sollten Sie nur Verweise dieser Zeichenfolge löschen. Ihre string
Variable, die XML-Werte hat, sollte nicht sein static
Müll gesammelt werden (read more about roots)
Versuchen zu verwenden kompakte GCSettings.LargeObjectHeapCompactionMode
.
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; GC.Collect();
Dies wird das Large Object Heap komprimieren, wenn die nächsten Full Garbage Collection
ausgeführt wird. Mit GC.Collect()
Aufruf nach den Einstellungen wurde der GC sofort kompaktiert.
Try WeakReference
zu verwenden:
WeakReference w = new WeakReference(MyLargeObject); MyLargeObject = w.Target as MyLargeClass;
MyLargeClass MyLargeObject;
if ((w == null) || ((MyLargeObject=w.Target as MyLargeClass) == null)) { MyLargeObject = new MyLargeClass(); w = new WeakReference(MyLargeObject); }
Dieser Artikel gibt, ist sehr nützlich, um Sie über Garbage Collection
und der Artikel wird in einfachem Englisch geschrieben.
Ist LoH der Große Objekt Haufen? Fügen Sie die Framework-Version für Fragen ein, die den GC betreffen, und versuchen Sie, mehr darüber zu erfahren. –
Fügen Sie auch einen Link zu dem Artikel ein, den Sie gelesen haben –
Gibt es einen Verweis auf diesen String? Ist es vielleicht interniert? – Luaan