2012-05-17 5 views
0

Je crée un petit jeu sous forme de fenêtres, et j'utilise la propriété backgroudimage. Je crée de nouveaux bitmaps et les donne au formulaire. Le problème est, le programme utilise trop de mémoire - chaque fois qu'il fait le processus de création de nouveaux bitmap, il ajoute plus de 2k! Après un moment, je suppose que le garbage collector les enlève tous (la mémoire baisse à la fois), mais il peut atteindre 800k et c'est ridicule pour mon petit jeu. Je n'ai aucune référence à la Bitmap après l'avoir mise dans la propriété de formulaire, et même quand j'ai mis le bitmap à zéro, le problème n'est pas résolu. Que puis-je faire pour résoudre ce problème de mémoire? Merci!Modifier le formulaire Backgroundimage prend trop de mémoire

+0

Tout comme une note, .NET ne voit aucun problème avec la mémoire, il a gagné » t l'effacer. Si vous surchargez Windows avec des applications, il va tomber. Mais ne vous en faites pas peur en utilisant trop de mémoire. Il va le nettoyer si nécessaire. "L'optimisation prématurée est la racine de tous les maux" –

+0

vous roken droit, la prochaine fois que je ferai comme vous le dites. – liran63

Répondre

2

Obtenir une référence à l'image précédente avant de la nouvelle, de sorte que vous pouvez la jeter:

Image oldImage = this.BackgroundImage; 
this.BackgroundImage = newImage; 
oldImage.Dispose(); 
+0

Je ne sais vraiment pas pourquoi, mais cela n'a aucune influence sur la mémoire (la fonction Dispose()). – liran63

+0

@ liran63: Si vous créez de nouvelles images, il est normal que l'utilisation de la mémoire augmente. Le garbage collector effectuera seulement un nettoyage quand c'est nécessaire ou s'il y a du temps libre à utiliser. L'appel 'Dispose' ne libère pas de mémoire en soi, mais il facilite le nettoyage car les objets n'ont pas besoin d'être finalisés. – Guffa

+0

Oui, c'est bien - Dispose est comme un 'J'ai tout nettoyé, alors ne rangez pas mes ressources non managées'. C'est parce que Dispose a normalement un appel à GC.SuppressFinalize (this), ce qui signifie qu'il n'a pas à faire de travail supplémentaire pour ranger les choses. Vous avez sauvé le problème –