Bonjour,

Je rencontre un petit problème en utlisant XNA (cependant mon problème est relatif au C#!).

Je souhaite écrire un gestionnaire d'images, qui contiendrait une bibliothèque de texture et qui renverrait des références vers les images dès qu'un objet en demande une. En clair : je veux éviter la duplication d'images en mémoire.

Mon TextureManager contient un dictionnaire liant string et Texture2D. A chaque demande, le gestionnaire vérifie si le nom de l'image est connu, auquel cas il renvoie l'image correspondante, sinon il la charge, l'ajoute à la bibliothèque et la renvoie.

Un appel à la fonction GetTexture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
texture = textureManager.GetTexture(assetName);
La définition de la fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
        public Texture2D GetTexture(string assetName)
        {
            if (texturesBank.ContainsKey(assetName))
                return texturesBank[assetName];
            else
            {
                texturesBank.Add(assetName, content.Load<Texture2D>(assetName));
                return texturesBank[assetName];
            }
        }
Pour tester, j'ai crée 1000000 sprites que j'ai lié à une image via le texture manager. D'un autre côté, j'ai créé le même nombre de sprites en chargeant à chaque fois l'image d'une manière "classique".

Le problème c'est que les performances sont meilleures avec la méthode classique : environ 130mo d'utilisation de la mémoire contre environ 160 mo pour la version utilisant le TextureManager.

En cherchant d'ou venait le problème, je me suis dit que la ligne suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
texture = textureManager.GetTexture(assetName);
ne stockait peut être pas une référence vers l'image de la bibliothèque du texture manager mais bien directement la texture. Après le chargement des images et avant leur affichage à l'écran, j'ai donc vidé la bibliothèque d'images. Ainsi, elles n'auraient pas du s'afficher à l'écran puisqu'elles n'existeraient plus en mémoire... Le problème c'est que l'affichage ne pose pas de problèmes...

Voila donc ma question, comment m'assurer que mon TextureManager retourne bien une référence vers chaque image plutôt que de retourner les objets images?

Merci,