cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 2012
-
27 nov. 2008 à 07:47
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
31 janv. 2009 à 16:41
Bonjour,
j'ai tuojurs le semem probleme d ememoir euqi augmente et fini par saturer ...
J'ai un timer
achaque tick je vide, puis je charge un datatable a partir d'un dataadapter ( odbc)
et c monte ... pour arriver a ressources systemes insuffisantes ...
J'ai essayé d eplusieurs manieres :
- en ayant un datatable "globale" donc que je vide puis que je rempli
- en creant et detruisant le datatable a chaque chargement
meme resultat , au bout de dix minutes j'obtiens le message d'erreur ...
Savez vous commet resoudre ce probleme et d'ou il peut venir ( j'ai essayé des truc savec garbage collector et ca ne semble pas resoudre le pb non plus)
a moins que je l'utilise mal ...
bon je met toujours mon petit bout de code :
void charger()
{
DataSet dt = new DataSet();
da.Fill(dt);
dt.Dispose();
dt = null;
GC.Collect();
}
gglamicose
Messages postés94Date d'inscriptionlundi 7 juillet 2008StatutMembreDernière intervention 7 mars 20091 27 nov. 2008 à 09:50
Salut cudenetf !
Tout d'abord, fais "un peu plus" attention a ton orthographe, car il faut vraiment en vouloir pour se forcer à lire tes hiéroglyphes...
Pour ce qui est de l'utilisation du GC, ça m'a l'air correct (je ne l'ai utilisé qu'en JAVA, mais c'est 2 langages très proches). Par contre si tu utilise .Dispose, dt = null ne sert à rien !
As-tu pensé que le problème pouvait venir d'ailleurs ? On manque d'infos pour t'aider, mais à première vue si tu explose ta mémoire sa ne devrait pas venir de là...
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 27 nov. 2008 à 13:10
Java et C# très proche?
Ca fait plus ou moims 6-7ans que je pratique les deux et à mon sens ça n'a pas grand chose en commun sauf que c'est deux langage orienté object. La comparaison s'arrête là (ha oui, une petite note personnelle: j'espère ne plus jamaias devoir faire de java d'ici peu de temps...)
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 28 nov. 2008 à 13:21
Désolé pour mon ortographe,
faites un test
mon programme est un form qui ne contient qu'un timer ( je met interval=100)
et j'ai ecrit juste la fonction timer_tick
a chaque tick , je charge des données (en plus il n'y a qu'une ligne dans la table) et ca grimpe ...
dites moi ce que vous donne le test, ca ira vite a realiser
(avec un ficher .dbf je vous en aurez bien donner un mais je vois pas comment on met le spieces jointes)
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 31 janv. 2009 à 16:41
Salut,
"Par contre si tu utilise .Dispose, dt = null ne sert à rien !"
Dans l'exemple courant c'est vrai, vu que la référence (locale) sera de toute façon invalidée à la sortie de la méthode.
Maintenant imagines que derrière l'appel à Dispose il y ai un traitement de 3 heures avant la sortie de la méthode : la référence ne sera "invalidée" qu'au bout de ce traitement, l'objet ne sera donc pas élligible pour finalisation avant ce laps de temps.
Le pattern Dispose est là pour fournir une manière standard de mettre en place un code de nettoyage des ressources internes de l'objet, pas pour déclencher la finalisation.
Concernant GC.Collect, comme le dit la documentation, son appel ne garanti en rien une libération instantanée de la mémoire pouvant l'être.
Les mécanismes internes du GC continuent leur travail normal.
Pour le problème de crash évoqué ici il faudrait voir si le problème n'est pas ailleurs : le code cité exécuté en boucle ne devrait pas poser de problème (hormis le fait que le GC va consommer du temps à libérer de la mémoire).