Fond d'application - Consommation mémoire

Signaler
Messages postés
3
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
26 juin 2007
-
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
4 décembre 2012
-
Bonsoir tout le monde,

J'ai un petit soucis , avec mon fond d'application .

J'ai une form qui sert de MDIParent dans laquelle j'ouvre d'autre form.

Exemple :

J'ai un bouton sur ma MDIParent en lorsque je clique dessus , je fais la chose suivante :

FrmFicheJoueur frm = new FrmFicheJoueur( );
frm.MdiParent = this;
frm.Show( );

Ensuite je ferme cette form enfant , et le mémoire qu'elle a allouée ne se libère pas, je suppose que c'est parceque la MDIParent est toujours ouverte, mais est ce qu'il y a un moyen de libérer la mémoire quand même.
Car mon fond d'application doit tourner des jours avec des fermetures et ouvertures autant qu'on le souhaite hors la je sature vite en mémoire.

J'ai déjà essayer le GarbageCollector mais aucun effet ( je l'utilise peut être mal : GC.Collect( ) ).

Merci pour vos réponses.

6 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut, comment vois tu que le mémoire n'est pas libérée ?

//pour fermer la form :

// Après cette méthode la forme n'est plus contenue dans la propriété MDIChildren.
myForm.Close( );
// Dans certains cas avec les formes MDI Dispose est plus éfficace que Close.
myForm.Dispose( );
// marque NULL, maintenant le GC peux ramasser la forme.
myForm = null;
// Force le passage du GC.
// GC.Collect( );
Messages postés
3
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
26 juin 2007

Pour voir que ma mémoire n'est pas libérée, je regarde dans le gestionnaire des tâches , la propriété "Util. mémoire".


J'ai essayé tout ça, mais toujours pas de mémoire libérer.
Messages postés
10
Date d'inscription
jeudi 29 décembre 2005
Statut
Membre
Dernière intervention
9 septembre 2009

Bonjour,

Dans notre cas, nous avons utilisé en complément  un appel de temps en temps à
        SetProcessWorkingSetSize(Handle du process principal, -1, -1) ;

Qui permet de vider la mémoire paginée de l'application (si aucun autre process ne vient lire les objet que tu libères).
 
Messages postés
3
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
26 juin 2007

Merci beaucoup ça fonctionne, il ne me reste plus que le problème de mémoire virtuel à régler.

Car la méthode libérer la mémoire utilisé mais pas la mémoire virtuel.

Si vous avez une idée, je suis preneur.

Merci
Messages postés
10
Date d'inscription
jeudi 29 décembre 2005
Statut
Membre
Dernière intervention
9 septembre 2009

j'ai eu aussi un problème de memoire virtuelle,

en fait, j'utilisait la librairie Systeme.data.odbc et je ne sais pas encore si cela venait de la librairire .net ou de la librairie odbc de la base de données que j'utilisais mais nous avions bcp de probleme de fuite de memoire virtuelle.

Aujourd'hui nous utilisons directement le pilote .net développé pour la base de données. et nous n'avons plus de problème.

En gros nosu avons utiliser memprofiler et CRL pour pister les fuites...

Bonne continuation.
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
4 décembre 2012

bjr,j'ai un code qu'il utilise un picturebox pour dessiner des lignes mais certains moment j'ai un problème de mémoire insuffisante.je recherche une solution pour ce problème et surtout dans l’instruction:myGraphics.DrawPath(myPen,myGraphicsPath).et merci