Fond d'application - Consommation mémoire

Leakcimf
Messages postés
3
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
26 juin 2007
- 23 mai 2007 à 19:34
hou22
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
4 décembre 2012
- 26 sept. 2011 à 14:37
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

Lutinore
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Membre
Dernière intervention
27 octobre 2012
42
23 mai 2007 à 23:52
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( );
0
Leakcimf
Messages postés
3
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
26 juin 2007

28 mai 2007 à 20:59
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.
0
cs_Aurore38
Messages postés
10
Date d'inscription
jeudi 29 décembre 2005
Statut
Membre
Dernière intervention
9 septembre 2009

11 juin 2007 à 10:26
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).
 
0
Leakcimf
Messages postés
3
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
26 juin 2007

26 juin 2007 à 22:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

27 juin 2007 à 10:37
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.
0
hou22
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
4 décembre 2012

26 sept. 2011 à 14:37
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
0