IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Libérer de la mémoire en vidant des variables images


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut Libérer de la mémoire en vidant des variables images
    Hello tout le monde,

    J'ai un ptit problème en essayant d'écrire un code un peu propre, mais juste un peu .

    Alors je charge des images comme suit : (bon je sais c'est pas l'idéal d'utiliser ma variable comme nom de fichier mais passons)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                menu_image = new Image[menu_elements.Length];
                for (int i = 0; i < menu_image.Length; i++)
                {
                    menu_image[i] = Image.FromFile(@"C:\media\images\main_menu\" + i + ".png");
                }
    dans l'élément suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            private Image[] menu_image;
    et plus tard j'essaie de le vider comme suit : (enfin après avoir un peu tout essayé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                            for (int i = 0; i < menu_image.Length; i++)
                            {
                                menu_image[i].Dispose();
                                menu_image[i] = null;
                            }
                            menu_image = null;
    le problème, c'est que je peux toujours utiliser ces images, et l'espace mémoire utiliser par mon applic reste inchangé, donc il doit y avoir un problème dans ma procédure de nettoyage.

    Tout ça pour en arriver à ma question, comme est-ce que je peux vider mes images quand j'en ai plus besoin ???

    merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par PoZZyX Voir le message
    le problème, c'est que je peux toujours utiliser ces images, et l'espace mémoire utiliser par mon applic reste inchangé, donc il doit y avoir un problème dans ma procédure de nettoyage.
    Tu as déjà entendu parler du GC ( Garbage-Collector ) ?
    En gros, en .NET on ne peut pas libérer la mémoire directement. C'est le GC qui s'en charge. Le hic est que le GC fait le ménage quand il le juge nécéssaire. Celà peut être au bout de 15 secondes mais aussi au bout de 30 minutes, nul ne le sais ...
    Cependant tu peut le forcer à faire le ménage en appellant GC.Collect après avoir disposé toutes tes images mais en général ce n'est pas une méthode conseillée et elle peut être d'ailleurs très longue ( presqu'une seconde ... critique son on a besoin de vitesse ... ) et parfois même il y a plus de mémoire utilisée après qu'avant ( mais dans ton cas celà devrait suffire ).

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    il y a un truc pas logique. Si tu as disposé et nullé toute tes images, tu ne peux plus les utiliser, tu n'as plus de references dessus. Si tu peux toujours les utiliser, c'est qu'elles sont encore referencées quelque part. Et à ce moment la il est logique que ton appli ne bouge pas.

    De plus, le fait de disposer une image n'entrainera pas forcement une diminution de l'utilisation memoire.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ben ce qui me semble bizarre, c'est qu'il puisse toujours les utiliser après le Dispose... la doc est pourtant assez explicite:
    The Dispose method leaves the Image in an unusable state. After calling Dispose, you must release all references to the Image so the garbage collector can reclaim the memory that the Image was occupying.

  5. #5
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Oki merci pour votre aide, j'ai trouvé le problème ça venait d'un bout de code parallèle a celui ci

    Désolé du dérangement, mais merci quand meme, j'aurais apris le fonctionnement du garbage collector

    désolé et merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gestion des variables en mémoire
    Par tubaas dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/01/2010, 11h13
  2. Garder en mémoire des variables
    Par Mandjames dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/05/2009, 15h40
  3. Réponses: 2
    Dernier message: 19/02/2009, 12h15
  4. Structure des variables en mémoire
    Par Co_Co dans le forum C++
    Réponses: 7
    Dernier message: 30/05/2007, 18h55
  5. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo