Memoire

Résolu
fdouieb Messages postés 264 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 12 juin 2013 - 11 nov. 2005 à 11:34
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 13 nov. 2005 à 03:22
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

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 nov. 2005 à 14:09
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#
*/
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
11 nov. 2005 à 12:15
et le Dispose() ???

il sert à quoi

Sébastien FERRAND
[MVP C#]
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
11 nov. 2005 à 12:43
Close appelle Dispose, c'est ton buffer qui consomme la mémoire.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
11 nov. 2005 à 12:50
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#]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fdouieb Messages postés 264 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 12 juin 2013 3
11 nov. 2005 à 14:03
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
0
fdouieb Messages postés 264 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 12 juin 2013 3
12 nov. 2005 à 18:05
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
12 nov. 2005 à 20:43
Et avec le GC.Collect() comme te l'a conseillé coq ?

Mx
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
13 nov. 2005 à 03:22
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.
0
Rejoignez-nous