OVH Cloud OVH Cloud

Détruire un tableau

2 réponses
Avatar
Titeuf
Bonjour

J'ai le code suivant que j'ai adapté d'une source en vb6 qui est censé
remplir la ram puis ensuite de vider buffer pour libérer tout cet espace.

x correspond au nombre de Mo que l'on veut libérer

Pour ce faire je dois détruire buffer cela marche j'ai vérifié en mode debug
mais cela n'a aucun impact sur l'espace libre de la ram.



J'ai bien essayé de changer Erase Buffer par Buffer=nothing mais sans succès

Je précise que ce code fonctionne en vb6 !



Si quelqu'un avait une idée de la manière dont je pourrais détuire Buffer

Merci d'avance





Dim i As Short

Dim Buffer As Object



ReDim Buffer(x)



For i = 0 To x - 1

Buffer(i) = Strings.Space(1000000)

Application.DoEvents()

Me.Text = i

Next



Erase Buffer

2 réponses

Avatar
Julien Bakmezdjian [MS]
Bonjour,

En faisant buffer = Nothing, vous rendez la variable buffer "supprimable"
par le Garbage Collector... Cela ne signifie pas que la mémoire sera libérée
à cet instant précis. L'algorithme du GC est assez complexe, et il ne
libérera la mémoire qu'au moment le plus opportun (besoin de mémoire pour un
autre objet, processus libre...).
La notion de Garbage Collector (ramasse-miettes en bon français) dispense le
développeur de la gestion de la mémoire (allocation et libération), mais
n'est pas déterministe : nous ne pouvons savoir à quel moment la mémoire
sera réellement libérée.

Pour forcer la collection du GC, vous pouvez utiliser les lignes suivantes
juste après le buffer = Nothing (ce n'est pas recommandé, mais bon...) :

GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()

Cordialement,

Julien Bakmezdjian


"Titeuf" a écrit dans le message de news:
%
Bonjour

J'ai le code suivant que j'ai adapté d'une source en vb6 qui est censé
remplir la ram puis ensuite de vider buffer pour libérer tout cet espace.

x correspond au nombre de Mo que l'on veut libérer

Pour ce faire je dois détruire buffer cela marche j'ai vérifié en mode
debug mais cela n'a aucun impact sur l'espace libre de la ram.



J'ai bien essayé de changer Erase Buffer par Buffer=nothing mais sans
succès

Je précise que ce code fonctionne en vb6 !



Si quelqu'un avait une idée de la manière dont je pourrais détuire Buffer

Merci d'avance





Dim i As Short

Dim Buffer As Object



ReDim Buffer(x)



For i = 0 To x - 1

Buffer(i) = Strings.Space(1000000)

Application.DoEvents()

Me.Text = i

Next



Erase Buffer






Avatar
Titeuf
Bonjour,
Merci depuis le post de mon message j'avais pensé au garbage collector mais
s'en vraiment y donner de l'importance.
La effectivement ca marche beaucoup mieux avec le GB mais ce que je ne
comprend pas c'est si je ne rend pas supprimable "buffer" le GB ne libère
pas cette mémoire !

Sinon j'avais une autre question : à la place du GB je créer un thread et
lorsque je provoque l'arret de celui est-ce qu'il libère la mémoire utilisé
pas "buffer" ??

Merci d'avance


"Julien Bakmezdjian [MS]" a écrit dans le
message de news: uPpfwX$
Bonjour,

En faisant buffer = Nothing, vous rendez la variable buffer "supprimable"
par le Garbage Collector... Cela ne signifie pas que la mémoire sera
libérée à cet instant précis. L'algorithme du GC est assez complexe, et il
ne libérera la mémoire qu'au moment le plus opportun (besoin de mémoire
pour un autre objet, processus libre...).
La notion de Garbage Collector (ramasse-miettes en bon français) dispense
le développeur de la gestion de la mémoire (allocation et libération),
mais n'est pas déterministe : nous ne pouvons savoir à quel moment la
mémoire sera réellement libérée.

Pour forcer la collection du GC, vous pouvez utiliser les lignes suivantes
juste après le buffer = Nothing (ce n'est pas recommandé, mais bon...) :

GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()

Cordialement,

Julien Bakmezdjian


"Titeuf" a écrit dans le message de news:
%
Bonjour

J'ai le code suivant que j'ai adapté d'une source en vb6 qui est censé
remplir la ram puis ensuite de vider buffer pour libérer tout cet espace.

x correspond au nombre de Mo que l'on veut libérer

Pour ce faire je dois détruire buffer cela marche j'ai vérifié en mode
debug mais cela n'a aucun impact sur l'espace libre de la ram.



J'ai bien essayé de changer Erase Buffer par Buffer=nothing mais sans
succès

Je précise que ce code fonctionne en vb6 !



Si quelqu'un avait une idée de la manière dont je pourrais détuire Buffer

Merci d'avance





Dim i As Short

Dim Buffer As Object



ReDim Buffer(x)



For i = 0 To x - 1

Buffer(i) = Strings.Space(1000000)

Application.DoEvents()

Me.Text = i

Next



Erase Buffer