Как освобождать память в MemoryStream в c#?

во время работы приложения в память читаются 5 и больше файлов
во время чтения файлов используется от 1gb до 5gb памяти

хотя должно использоваться только 1gb, так как каждый исходный файл который читает MemoryStream по 1gb

flush/close вроде делаю

подскажите пожалуйста в чем ошибка

как правильно освобождать память перед чтением нового файла в память?

static void Main(string[] args)
        {
            string filePath;                   
            string[] files = { "C:\\001.txt", "C:\\002.txt", "C:\\003.txt" , "C:\\004.txt", "C:\\005.txt", "C:\\006.txt", "C:\\007.txt", "C:\\008.txt" };
                        
            //
            for (int i = 0; i < files.Length; i++)
            {
                    
                FileStream fileStream = File.OpenRead( files[i] );
                using ( fileStream  )
                {

                    MemoryStream memStream = new MemoryStream();
                    memStream.SetLength(fileStream.Length);

                    int l = (int)fileStream.Length;
                    fileStream.Read(memStream.GetBuffer(), 0, l); 

                    using (StreamReader sr = new StreamReader(memStream, Encoding.Default) )
                    {
                        
                    }

                  
                    memStream.Flush(); 
		    memStream.Close();
                    
                }
                
                    fileStream.Close();  

            }
  • Вопрос задан
  • 3658 просмотров
Пригласить эксперта
Ответы на вопрос 2
@prog323 Автор вопроса
сделал уже вот так (но 2 гига иногда кушается, все файлы ровно 1gb)
непонятно что кушается

sr.Close();   sr = null;   if (sr != null) { sr.Dispose(); }; GC.Collect();
memStream.Flush();  memStream.Close();  memStream = null;   if (memStream != null) { memStream.Dispose(); };  GC.Collect();
fileStream.Close(); fileStream = null; if (fileStream != null) { fileStream.Dispose(); };         GC.Collect();
Ответ написан
Комментировать
@plasticmirror
FileInfo -> размер файла
new byte[размер файла]
читай прямо туда
будет отъедать ровно столько, сколько нужно

если надо memorystream - создавай его поверх буфера
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы