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 :

[C# .NET 2.0] setTooltips et fuite mémoire


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut [C# .NET 2.0] setTooltips et fuite mémoire
    Bonjour,

    Mon application prend environ 45 Mo aprés son lancement. J'ai développé un certain nombre de UserControle, et lorsque j'en utilise un en particulier, j'ai comme une fuite mémoire. Au bout de plusieurs jours, mon application peut prendre 600 ou 700 Mo de RAM!

    Ce user controle n'a rien de particulier, excepté que j'utilise dedans 2 counter pour connaitre le % CPU consommé et le % de RAM consommé (j'appel donc cpu_used_counter.NextValue() dans un timer qui se lance toutes les 500 ms). Une fois que j'ai le pourcentage, je fais une sorte de vumeter avec une PictureBox dont je fais varier la largeur (la PictureBox est crée une seul fois, seul sa largeur varie toutes les 500 ms).

    Quelqu'un a-t-il une idée d'ou peut venir le probleme ? J'ai vérifié tout les New, fait tout les disposes correspondant etc... mais maintenant je sèche.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    bon, j'ai fini par mettre en commentaire une à une la ligne de code qui sont appelées par le timer et j'ai trouvé la cause, meme si c'est délirant...

    Dans mon timer, je met en tooltips sur ma picturebox vumeter le % de cpu utilisé. Idem pour la RAM. Et bien c'est ça qui bouffe la mémoire.

    Méthode de test :
    - je passe mon timer à 10 ms pour accélerer l'arrivé du bug.
    - je lance mon programme en commentant les helpToolTip.SetToolTip(...)
    - au bout de 10 min, 47 mo de RAM consommée.
    - je décommente les SetToolTip (j'en ai 6), relance le prog pour 10 min et là 77 mo de RAM consommée. (le temps que j'écrive ce message, je suis maintenant à 100 mo).

    le framework .NET est il si buggé que ça ? j'y crois pas tellement c'est gros. Quelqu'un peut il faire un test chez lui pour confirmer ?

    pour infos ou test, mon tooltips est configuré comme suit :
    automaticdelay = 1
    autopopupDelay = 60000
    initialDelay = 1
    reshowDelay = 0
    showAlways = true

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    bon, j'ai fait une petite appli de test tres simple pour montrer le bug (binaire + source)
    http://perso.wanadoo.fr/xtream/TestT...MemoryLeak.zip

    une seul form, avec un timer et une picture box.
    vous pouvez essayer, la fonction setTooltips semble bien manger de la mémoire qu'elle ne libère pas lorsque le garbage collector passe. J'ai envoyé le bug à Microsoft, mais vu que y en a prés de 250.000 dans la pile, j'ai peu d'espoirs... Avec un timer à 10 ms, on voit bien à vu d'oeil dans le gestionnaire de tache de windows que la RAM monte à prés de 1 mo toutes les 2 minutes.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
     
    namespace TestTooltipsMemoryLeak {
        public partial class Form1 : Form {
            private long i = 0;
     
            public Form1() {
                InitializeComponent();
            }
     
            private void timer1_Tick(object sender, EventArgs e) {
                toolTip1.SetToolTip(vumeter1PictureBox, "no imagination " + i++);
                toolTip1.SetToolTip(vumeter2PictureBox, "no imagination " + i++);
                toolTip1.SetToolTip(vumeter3PictureBox, "no imagination " + i++);
            }
     
            private void button1_Click(object sender, EventArgs e) {
                timer1.Enabled = !timer1.Enabled;
                if (timer1.Enabled) {
                    timerManagerButton.Text = "disable timer";
                } else {
                    timerManagerButton.Text = "enable timer";
                }            
            }
        }
    }

  4. #4
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Salut,

    En effet, le problème vient au niveau du SetToolTip pour un objet déjà "Tooltipé".

    Apparamment, seul l'instruction suivante libère la mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tooltip1.RemoveAll()

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    bon, j'ai essayé le removeAll mais c'est pas mieux

Discussions similaires

  1. Fuite mémoire dans application winform .NET 2.0
    Par olysmar dans le forum Framework .NET
    Réponses: 6
    Dernier message: 30/11/2012, 15h41
  2. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  3. Fuite Mémoire VB.NET
    Par LamInR dans le forum VB.NET
    Réponses: 6
    Dernier message: 11/01/2009, 18h36
  4. Fuite mémoire .NET
    Par alaks dans le forum Framework .NET
    Réponses: 25
    Dernier message: 10/04/2008, 22h09
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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