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 :

Utilisation de la mémoire


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Utilisation de la mémoire
    Bonjour,

    Mon application gère mal le vidage de la mémoire qui augmente a chaque ouverture de fenêtre, voici comment ce comporte l application :

    - Dans ma form principal je fais un show d'une fenêtre et quand cette fenêtre est fermée un handler " fermerform(Sender = MaFenetre) " est executer.

    A la fin de cet handler je fais un Sender.dispose et sender = nothing

    L'application peut être exécuter plus de 100 fois sur un même poste (TSE)

    Mémoire utilisée :
    - Au lancement (avec le menu) 50 Mo -> 1 fenêtre ouverte 65 Mo ->
    Retour au menu 60 Mo -> 1 fenêtre ouverte 70 Mo ->
    Retour au menu 65 Mo -> 1 fenêtre ouverte 75 Mo -> ...

    Auriez vous une méthode qui va me permettre de vider la mémoire utilisée ?

    merci

  2. #2
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    S'il ne reste aucune référence vers les fenêtres en question, la mémoire sera automatiquement récupérée quand le système l'estimera nécessaire. Tu peux forcer la collecte de la mémoire inutilisée en appelant GC.Collect (mais attention de ne pas en abuser, c'est gourmand en termes de performance...)

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    nous on a un thread dans l'appli qui appelle gc.collect toutes les 5min et y a pas soucis spéciaux, meme si en théorie ca se passe très bien tout seul et que là c'est un peu extremiste
    (appli en route 24/24 7/7)

    sinon attention à bien compiler en mode release et pas en mode debug
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    nous on a un thread dans l'appli qui appelle gc.collect toutes les 5min et y a pas soucis spéciaux
    Toutes les 5 minutes, c'est pas ce que j'appelle "en abuser"

    Citation Envoyé par sperot51 Voir le message
    sinon attention à bien compiler en mode release et pas en mode debug
    Ca change quelque chose par rapport à GC.Collect ?

  5. #5
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Si le GC ne collecte pas, c'est qu'il n'y a rien à collecter
    En gros, il y a un endroit où tu fais des allocations mémoire (même si cette allocation se fait "à ton insu" par le framework) que tu ne libères pas par la suite.

    Tu devrais nous en dire un peu plus sur ce que fais ton application : accès à des fichiers, déclenchement de Threads asynchrones, dessins avec les objets du Namespace System.Drawing...
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  6. #6
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Gold Bug Voir le message
    Si le GC ne collecte pas, c'est qu'il n'y a rien à collecter
    Pas forcément... le GC ne tourne pas en permanence. Si un objet n'a plus aucune référence qui pointe dessus, en général il n'est pas immédiatement collecté par le GC

  7. #7
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Pas forcément... le GC ne tourne pas en permanence. Si un objet n'a plus aucune référence qui pointe dessus, en général il n'est pas immédiatement collecté par le GC
    Oui, je connais assez bien le fonctionnement du GC, je me le suis farci en long et en large en formation.

    Mais là visiblement, son problème se déroule à l'échelle d'une journée, donc je ne pense pas qu'il soit directement lié au GC.
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ca change quelque chose par rapport à GC.Collect ?

    oui et non
    mais sur la mémoire prise par l'appli oui

    en mode debug, le compilateur garde des instances de tout
    on a fait des tests chez un client sans faire gaffe qu'on était en mode debug et l'appli crashait au bout de 2 jours avec outofmemory
    pour chercher on avait fait un test :instancier une classe de 2 lignes héritant de component dans une boucle avec un using pour le dispose, et ca crashait très rapidement
    au final je suis tombé sur un article de mcirosoft expliquant les différences en mode debug et release

    d'ailleurs en mode debug, avec un point d'arret dans le catch par exemple, on peut connaitre la valeur des variables de sub qui sont hors portée, en mode release, vs ne donne pas la valeur
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    oui et non
    mais sur la mémoire prise par l'appli oui

    en mode debug, le compilateur garde des instances de tout
    on a fait des tests chez un client sans faire gaffe qu'on était en mode debug et l'appli crashait au bout de 2 jours avec outofmemory
    pour chercher on avait fait un test :instancier une classe de 2 lignes héritant de component dans une boucle avec un using pour le dispose, et ca crashait très rapidement
    au final je suis tombé sur un article de mcirosoft expliquant les différences en mode debug et release

    d'ailleurs en mode debug, avec un point d'arret dans le catch par exemple, on peut connaitre la valeur des variables de sub qui sont hors portée, en mode release, vs ne donne pas la valeur
    OK merci... c'est bon à savoir !

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    et dans l'article de microsoft, ils disent que c'est interdit de distribuer un programme en mode debug
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    et dans l'article de microsoft, ils disent que c'est interdit de distribuer un programme en mode debug

    interdit ?! qu'est-ce que ça peut leur faire ?

Discussions similaires

  1. Utilisation de la mémoire vive par un programme
    Par Pixcoder dans le forum C++
    Réponses: 13
    Dernier message: 25/09/2006, 12h36
  2. Réponses: 21
    Dernier message: 21/07/2006, 16h55
  3. Utilisation de la mémoire dynamique
    Par Stany dans le forum Windows
    Réponses: 17
    Dernier message: 27/04/2006, 11h39
  4. Utilisation de la mémoire
    Par jagboys dans le forum MFC
    Réponses: 1
    Dernier message: 12/11/2005, 16h30
  5. Utilisation de la mémoire vive....
    Par Neilos dans le forum Windows
    Réponses: 9
    Dernier message: 24/11/2003, 11h09

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