Force garbage collection von arrays, C#

Ich habe ein problem, wo ein paar 3-dimensionale arrays weisen Sie eine riesige Menge an Speicher und das Programm braucht manchmal ersetzen Sie Sie mit größere/kleinere und wirft eine OutOfMemoryException.

Beispiel: es gibt 5 zugeteilt 96 MB-arrays (200x200x200, 12 Daten-bytes je Eintrag) und das Programm braucht, um Sie zu ersetzen mit 210x210x210 (111MB). Es tut es in einer Weise, die ähnlich zu dieser:

array1 = new Vector3[210,210,210];

Wo array1-array5 sind die gleichen Felder, die zuvor verwendet. Diese sollten die alten arrays als Kandidaten für die garbage-collection aber scheinbar die GC nicht handeln schnell genug, und lässt die alten arrays zugewiesen werden, bevor die Zuteilung der neuen - die Ursachen der OOM - während, wenn Sie befreit werden, bevor die neuen Zuordnungen der Raum sollte genug sein.

Was ich Suche, ist eine Möglichkeit, so etwas zu tun:

GC.Collect(array1) //this would set the reference to null and free the memory
array1 = new Vector3[210,210,210];

Ich bin mir nicht sicher, ob eine vollständige garbage collecion eine gute Idee wäre, da dieser code kann (in einigen Situationen) ausgeführt werden müssen, ziemlich oft.

Gibt es eine richtige Weg, dies zu tun?

InformationsquelleAutor der Frage John Doe | 2009-07-09

Schreibe einen Kommentar