Memoire [Résolu]

Signaler
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Bonjour,

Voici a petit bout de programme, Au niveau memoire c'est au moment de
la lecture du fichier que la consomation commence. Mon problem est
lorsque je close le fichier "myFileStream.Close();" je ne recupere pas
la memoire ?????.

J'ai fait un test avec un fichier de 600Mo.




FileStream myFileStream =
File.OpenRead(myFile.FullName);


byte[] buffer
= new byte[myFileStream.Length];


myFileStream.Read(buffer, 0,
buffer.Length);

.


.


.




myFileStream.Close();

8 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
Tu disposes de combien de mémoire sur la machine en question ?

Sinon essaie de forcer la récupération de la mémoire par le GC :
myFileStream.Close();
myFileStream = null;
GC.Collect();

/*
coq
MVP Visual C#
*/
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
et le Dispose() ???

il sert à quoi

Sébastien FERRAND
[MVP C#]
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Close appelle Dispose, c'est ton buffer qui consomme la mémoire.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
ah oui... ooops...

j'avais pas vu que le buffer avait la taille du filestream
donc, tu peux aussi ajouter :

buffer = null;

pour le libérer...

Sébastien FERRAND
[MVP C#]
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
Merci de vos reponses, mais j'avis déjà fait l'ensemble de vos propositions.

sebmafate j'ai meme fait le dispose du filestream mais en viens

a la fin de mon traitement mon appli garde environ 600Mo. C'est la catastrophe
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
voici le test. Le fichier Test.db = 527 Mo



private void button1_Click(object
sender, System.EventArgs e)

Memoire utilisé

{







17092 Ko

FileStream
myFileStream = File.OpenRead(@"D:\Test.DB");

17184 Ko

byte[]
buffer = new
byte[myFileStream.Length];

19076 Ko


myFileStream.Read(buffer, 0, buffer.Length);


560008 Ko




myFileStream.Close();




560004 Ko

myFileStream =
null;
560004 Ko

buffer =
null;





560004 Ko

}

Je ne conprend pas. Est-ce que vous pouvais faire le test chez vous!



Pour te repondre Coq.

1 Reponse -> je possede 1024 Mo

2 Reponse -> myFileStream = null; ne change pas le resultat
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Et avec le GC.Collect() comme te l'a conseillé coq ?

Mx
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Faut bien comprendre que la mémoire n'est pas libérée immédiatement le GC passera "quand il aura le temps" ou quand le besoin en mémoire se fera sentir et à ce moment là il ramassera les objets qui n'ont plus de références valides ( à null ), GC.Collect( ) force le passage du garbage collector.