cs_Tolliap
Messages postés60Date d'inscriptionlundi 4 décembre 2006StatutMembreDernière intervention11 janvier 2013
-
27 janv. 2009 à 10:06
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
31 janv. 2009 à 18:42
Bonjour,
J'ai un problème de taille dans tous les sens du terme...
J'ai créé un programme de gestion pour une entreprise, lors le l'ouverture de celui ci il pèse en mémoire 30 Mo
Après plusieurs ouverture de divers formulaire mon application ne cesse de grossir en mémoire, jusqu'à arrivé a saturation (environ 250mo).
J'aimerai savoir si vous connaissais un méthode pour vider le mémoire... apparemment, mes formulaire ne libéré pas la mémoire après sa destruction.
(je fait un dispose suivi d'un form = null)
Aprés quelques recherche j'avais trouver cette methode que je lance au démarage et que je fait tourner en boucle :
<hr size="2" width="100%" />
while (!event_.WaitOne(PERIOD_IN_MS, false))
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
<hr size="2" width="100%" />
Mais sans succées.
Esque je doit mettre tous mes composant a null pour le garbage collection se fasse bien?
kerma26
Messages postés36Date d'inscriptionvendredi 11 mai 2007StatutMembreDernière intervention20 août 2009 27 janv. 2009 à 21:13
Salut,
Alors tout d'abord, quand tu ouvres tes formulaires, as-tu pensé à les fermer ?
Parce que il ne suffit pas de cliquer sur la croix rouge, il faut aussi que tu fasse un maFenetre.close(), enfin je ne sais plus la syntaxe exacte.
Donc déjà vérifie que tu ferme bien comme il faut chaque formulaire.
Puis deuxièmement as-tu debugger ton programme pas à pas pour voir si tu n'a pas une boucle infinie (while/for).
Voila désolé je ne peu pas t'aider plus que ça, donc j'espère que ça résoudra ton problème.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 27 janv. 2009 à 21:36
Bonsoir,
De base, le framework .NET occupe environ 20Mo en mémoire.
Concernant la méthode Collect de GC, elle ne doit pas être utilisée par "des amateurs": le framework .NET se charge de tout, faut pas toucher à ça SAUF si on sait exactement ce qu'on fait, et à mon avis celui qui a pondu la méthode que tu proposes ci-dessus le ne sait pas...
Concernant ton problème, il faut voir si y'a pas des objets qui ne sont pas disposés, des boucles infinies, etc. Sans code on va pouvoir aider et comme tu ne peux pas poster la solution au complet (...)
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 31 janv. 2009 à 16:44
Salut,
Le type DataSet maintient peut être (je dis bien peut être, je ne me suis jamais penché sur ce type en détail) des données statiques, mais de la à saturer j'en doute.
Après il faut voir ce que tu fais avec les données du DataSet, et notamment si tu ne maintient pas des références aux DataTable etc
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 31 janv. 2009 à 18:42
Exemple (idiot mais c'est juste pour illustrer clairement) :
class MaClasse
{
private DataTable maTable;
public MaClasse(DataSet ds)
{
maTable = ds["Toto"];
}
...
}
...
MaClasse maClasse;
private MaMethode()
{
DataSet mesDonnees = ...;
maClasse = new MaClasse(mesDonnees);
mesDonnees.Dispose();
// Arrivé ici, une référence est maintenue (dans l'instance de MaClasse) sur une des instance de DataTable qui faisaient partie du DataSet, l'appel à Dispose sur le DataSet ne détruit pas les instances de DataTable (elles deviennent élligibles à la finalisation si elle ne sont plus référencées ailleurs)
}
Enfin, ce n'est qu'un exemple de problème éventuel.