OVH Cloud OVH Cloud

Fuite de Mémoire

3 réponses
Avatar
E.H
Bonjour=20
Si je lance dans un timer cette routine qui doit lire une=20
base et rafraichir un datagrid alors progressivement la=20
taille qu'utilise mon programme augmente r=E9guli=E8rement.
Je ne sais plus quoi faire pour r=E9soudre ce probl=E8me.
Private Sub affiche_alarmes()
ConnString =3D "Provider =3D=20
Microsoft.Jet.Oledb.4.0;Data Source=3D" &=20
Application.StartupPath & "\Mabase.mdb;Jet OLEDB:Database=20
Password=3D123;"
Dim requete As String =3D "SELECT * FROM=20
AlarmesPresentes ORDER BY PRIORITE,CHRONO ASC "
Dim ds As New DataSet
Dim conn As New OleDbConnection(ConnString)

conn.Open()
Dim da As New OleDbDataAdapter(requete, conn)
ds.Clear()
da.Fill(ds, "ALARMES")
DataGrid1.DataSource =3D ds.Tables("ALARMES")
DataGrid1.Refresh()
da.Dispose()
ds.Dispose()
requete =3D Nothing
conn.Close() : conn.Dispose()
End Sub

3 réponses

Avatar
David Bouchard
Essaye quelque chose. Regarde dans les process de windows la taille qui est
utilisé en mémoire lorsque la taille de ton formulaire est maximiser et
ensuite, réduit la taille du formulaire pour qu'il se retrouve seulement
dans la barre de menu de windows et regarde à nouveau la mémoire. Si
celle-ci revient à la valeur de départ ou au moin, qu'elle diminue de
beaucoup, alors, tu ne devrais pas avoir de problème. En faite, je ne suis
pas un expert avec la gestion de la mémoire mais je sais que le garbage
collector pour la mémoire est géré d'une façon assez spécial et autrement
dit, si jamais ta mémoire deviendrais trop chargé, il s'occuperait lui-même
de la vider, ce qu'il fait lorsque tu abaisse ta fenêtre. En faite, dans ton
cas, lorsque tu appelles dispose, ca ne veut pas dire que celui-ci va être
automatiquement vidé de la mémoire mais il va plutot être placé dans une
pile et ensuite, lorsque le CLR en sentira le besoin, il videra la mémoire
lui-même. Sinon, je suis un peu embêté pour t'aider puisque tu dispose bien
tout tes objets et je ne vois pas ou se situerait le problème.

David



a écrit dans le message de news:
04bf01c4ee86$d0d90b50$
Bonjour
Si je lance dans un timer cette routine qui doit lire une
base et rafraichir un datagrid alors progressivement la
taille qu'utilise mon programme augmente régulièrement.
Je ne sais plus quoi faire pour résoudre ce problème.
Private Sub affiche_alarmes()
ConnString = "Provider Microsoft.Jet.Oledb.4.0;Data Source=" &
Application.StartupPath & "Mabase.mdb;Jet OLEDB:Database
Password3;"
Dim requete As String = "SELECT * FROM
AlarmesPresentes ORDER BY PRIORITE,CHRONO ASC "
Dim ds As New DataSet
Dim conn As New OleDbConnection(ConnString)

conn.Open()
Dim da As New OleDbDataAdapter(requete, conn)
ds.Clear()
da.Fill(ds, "ALARMES")
DataGrid1.DataSource = ds.Tables("ALARMES")
DataGrid1.Refresh()
da.Dispose()
ds.Dispose()
requete = Nothing
conn.Close() : conn.Dispose()
End Sub
Avatar
E.H
Merci

Quand je réduis la fenêtre la mémoire diminue mais ensuite
elle commence à augmenter.Si je laisse cela fini par
saturer l'ordinateur et mon programme se plante.Si je sors
du programme je ne retrouve pas non plus la le nombre
initiale de mémoire disponible avant lancement.
Je me demande s'il n'y a pas un problème au niveau de
VB.NET .
Avatar
David Bouchard
En faite, je crois peut-être que tu serais mieux de ne pas disposer tes
objets à chaque fois puisque tu les utilises avec un timer de maniere
répétitive. J'ai l'impression que tu pourrais les garder instancier et
seulement ouvir et fermer la connection à chaque fois ainsi que faire un
clear sur ton dataset. Je ne suis pas convaincu que ca va régler le problème
mais j'ai l'impression que ca peut aider.

David

"E.H" a écrit dans le message de news:
051a01c4f01c$cb91b150$
Merci

Quand je réduis la fenêtre la mémoire diminue mais ensuite
elle commence à augmenter.Si je laisse cela fini par
saturer l'ordinateur et mon programme se plante.Si je sors
du programme je ne retrouve pas non plus la le nombre
initiale de mémoire disponible avant lancement.
Je me demande s'il n'y a pas un problème au niveau de
VB.NET .