Lassen Sie uns sagen, dass ich den folgenden Code haben ...Loop-Scope und Speicher Ausgabe
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
MyCustomClass myObj = new MyCustomClass();
sb.Append(myObj.RenderShortString());
}
Console.Write(sb.ToString());
Und das myCustomClass nehmen ist ein sehr großes Objekt. Nehmen wir zum Beispiel an, dass es ein internes Mitglied erstellt und enthält, das eine 1MB-Zeichenfolge enthält. Die RenderShortString() -Methode rendert einfach eine Zeichenfolge mit etwa 100 Zeichen Länge.
Beachten Sie, dass diese Schleifen 10000 Mal durchlaufen werden.
Ich habe etwas im Grunde so, das System.OutOfMemory Ausnahmen innerhalb der Schleife verursacht.
Meine Frage bezieht sich darauf, wenn der Speicherplatz, der für jede Instanz von myObj zugewiesen wurde, vom Garbage Collector bereinigt wird. Ich glaube nicht, dass ich ein Problem mit dem StringBuilder habe, aber ich könnte mich irren. Ich habe das Gefühl, dass die Instanzen von myObj im Speicher zugewiesen werden, aber nicht zum Aufräumen verfügbar sind, bis die Schleife beendet ist. Ist das richtig? Wenn ja, wie kann ich der Anwendung mitteilen, dass ich mit dieser Instanz fertig bin, sobald ich meine gerenderte Zeichenfolge erhalte?
Wird 'GC.Collect()' in der Schleife explizit aufgerufen, um das Problem zu beheben? Keine gute Idee als dauerhafte Lösung, aber es würde beweisen, dass die vorherigen Objekte zur Sammlung verfügbar sind und das Problem "nur" ist, dass der GC keine Chance hat zu laufen. – stevemegson