C# Wie, um vollständig zu entfernen Objekt aus dem Speicher

Habe ich eine C# - Anwendung, bestehend aus einer Pivot mit mehreren Pivotitems. Die normale Pivotitems ordnungsgemäß entladen und nicht Leck Speicher. Auf zwei der Elemente, aber ich habe Drawingsurfaces auf die ich verwenden Monogame zum Rendern von 3d-Modellen. Nach der Entladung und Beladung von deren Drehpunkte bin ich versucht, vollständig zu zerstören und dann komplett neu das "Spiel" Instanzen (vor allem, weil Monogame nicht erlauben, Sie zu ziehen, um zwei Oberflächen im moment und weil Sie eine Menge Speicher, und es ist nicht genug für Sie beide).

Mein problem kommt, wenn ich über den Xamlgame, die erstellt wird, beim laden tut es nicht frei, alle Speicher es verwendet. Dies bedeutet, dass jedes mal, wenn ich neu die Xamlgame es beginnt mit mehr und mehr Speicher, bis es keine mehr übrig. Deshalb würde ich gerne wissen, ob es eine C# Weg, um vollständig zu entfernen, um alle Speicherbereiche, die in Gebrauch genommen beim laden eines Objekts.

Jede Monogame bestimmte Art und Weise würde auch geschätzt werden. Im moment bin ich die erste die Entsorgung meiner vertex-und index-buffer, dann lösche ich meinen vertex-und index-Listen, die ich dann entsorgen meine Basiceffect und meine Graphicsdevicemanager, ich habe dann rufen Sie dispose auf das "Spiel" selbst und schließlich mache ich die variable mit dem "Spiel" gleich null.

PS. Wenn Sie jemals getan haben, diese im XNA-dann könnten Sie auch in der Lage sein, mir zu helfen, denn die syntax ist grundsätzlich die gleiche.

BEARBEITEN (Möglicherweise MonoGame bug):

Habe ich es nun geschafft reinigen Sie alle Puffer, etc. richtig. Es ist immer noch ein memory-leak auf meinem BasicEffect obwohl. Ich habe versucht, die Entsorgung und macht es null aber egal, was es hält nur die Verwendung von mehr und mehr Speicher jedes mal, wenn ich neu laden mein pivot.

Wenn Sie die Entsorgung aller IDisposable Ressourcen dann GC.Collect nicht funktioniert?
Ich rufe Sie, aber es doe nicht scheinen, um eine Wirkung zu erzielen
sind Sie sicher, dass Sie die Entsorgung all der verbindungen und Elemente? kannst du deinen code?
Okay dann finden Sie unter Force garbage collection von arrays, C#. Sie wahrscheinlich benötigen, um preallocate die großen Brocken der Erinnerung zu helfen, den GC optimieren der large object heap.
Es ist möglich, dass etwas intern MonoGame hängt auf dem Speicher. Kann man einen memory-profiler über Ihren code, um es zu finden? Insbesondere statische Referenzen kann oft die Wurzel des übels. Werfen Sie einen Blick auf die Umsetzung des Spiel Klasse, es hat eine interne statische Referenz auf sich selbst. github.com/mono/MonoGame/blob/develop/MonoGame.Framework/...

InformationsquelleAutor Gerharddc | 2013-07-07

Schreibe einen Kommentar