C# Comment faire pour supprimer complètement de l'objet à partir de la mémoire

J'ai une application en C# constitué d'un Pivot avec plusieurs Pivotitems. La normale Pivotitems décharger correctement et de ne pas présenter une fuite de mémoire. Sur deux des éléments si, j'ai Drawingsurfaces sur lequel j'utilise Monogame à rendre les modèles 3d. Après le déchargement et le chargement de leurs pivots, je suis en train de la détruire complètement, puis recréer complètement le "Jeu" des instances (principalement parce que Monogame ne vous autorise pas à tirer des deux surfaces à l'instant, et parce qu'ils utilisent beaucoup de mémoire et il n'est pas assez pour eux deux).

Mon problème vient que lorsque je me débarrasser de la Xamlgame qui est créée lors du chargement, il ne libère pas toute la mémoire qu'il a utilisés. Cela signifie que chaque fois que je recréer le Xamlgame il commence juste à l'aide de plus en plus de mémoire jusqu'à ce qu'il n'y est pas plus de gauche. Donc, je voudrais savoir si il y a C# façon d'en disposer de toute la mémoire qui a été pris en utiliser lors du chargement d'un objet.

Tout Monogame manière spécifique serait également appréciée. Pour le moment, je suis d'abord disposer de mon vertex et l'index de la mémoire tampon, puis-je effacer mon vertex et index des listes, je puis disposer de ma Basiceffect et mon Graphicsdevicemanager, je téléphone alors à disposer sur le "jeu" lui-même et enfin je fais la variable qui contient le "jeu" est égale à null.

PS. Si vous avez déjà fait cela dans le XNA, alors vous pourriez aussi être en mesure de m'aider parce que la syntaxe de base est le même.

MODIFIER (Peut-être MonoGame bug):

J'ai maintenant réussi à nettoyer tous les tampons etc. correctement. Il y a encore une fuite de mémoire sur mon BasicEffect bien. J'ai essayé de le disposer et de le rendre nul, mais peu importe ce qu'il ne cesse de l'aide de plus en plus de mémoire à chaque fois que je recharge mon pivot.

  • Si vous êtes à la liquidation de l'ensemble de la IDisposable ressources ne puis GC.Collect pas de travail?
  • Je l'appelle mais il ne sait pas semblent avoir un effet
  • êtes-vous sûr de l'élimination de toutes les connexions et éléments? pouvez-vous partager votre code?
  • Bon alors voir la Force de garbage collection de tableaux, C#. Vous avez probablement besoin de préallouer les gros morceaux de mémoire pour aider à la GC optimiser le tas d'objets volumineux.
  • Il est possible que quelque chose d'interne à MonoGame est accroché à la mémoire. Vous pouvez exécuter un profileur de mémoire au-dessus de votre code de le trouver? En particulier, les références statiques peuvent souvent être la racine du mal. Jetez un oeil à la mise en œuvre de la classe de Jeu, il a une statique interne référence à lui-même. github.com/mono/MonoGame/blob/develop/MonoGame.Framework/...
  • Il pourrait même être plus simple et sérieux bug dans MonoGame - il pourrait simplement être une fuite des ressources non managées (pas la mise en œuvre de IDisposable et un finaliseur correctement). Ne serait pas une surprise pour moi.
  • Comme mentionné dans mon edit pour problème semble être avec BasicEffect parce que si je ne l'utilise pas ma mémoire n'a pas de fuite. J'ai regardé le code pour BasicEffect et il semble qu'il n'y a pas de mise en œuvre pour les Éliminer, devrait-il en être ainsi?
  • Vous devriez probablement vous informer de ce bug à l'MonoGame équipe et lier de nouveau à cette question pour référence.

InformationsquelleAutor Gerharddc | 2013-07-07