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 41
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
Rejoignez-nous