OutOfMemoryException при отправке большого файла 500 МБ с помощью FileStream ASPNET

Я использую Filestream для чтения большого файла (> 500 МБ) и получаю исключение OutOfMemoryException.

Я использую Asp.net, .net 3.5, win2003, iis 6.0

Я хочу это в моем приложении:

Чтение данных из Oracle

Распакуйте файл, используя FileStream и BZip2

Прочитайте несжатый файл и отправьте его на страницу asp.net для скачивания.

Когда я читаю файл с диска, выдает ошибку !!! и получить OutOfMemory ...

, Мой код:

using (var fs3 = new FileStream(filePath2, FileMode.Open, FileAccess.Read)) 
        { 
          byte[] b2 = ReadFully(fs3, 1024); 
        } 

 // http://www.yoda.arachsys.com/csharp/readbinary.html
 public static byte[] ReadFully(Stream stream, int initialLength) 
  { 
    // If we've been passed an unhelpful initial length, just 
    // use 32K. 
    if (initialLength < 1) 
    { 
      initialLength = 32768; 
    } 

    byte[] buffer = new byte[initialLength]; 
    int read = 0; 

    int chunk; 
    while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0) 
    { 
      read += chunk; 

      // If we've reached the end of our buffer, check to see if there's 
      // any more information 
      if (read == buffer.Length) 
      { 
        int nextByte = stream.ReadByte(); 

        // End of stream? If so, we're done 
        if (nextByte == -1) 
        { 
          return buffer; 
        } 

        // Nope. Resize the buffer, put in the byte we've just 
        // read, and continue 
        byte[] newBuffer = new byte[buffer.Length * 2]; 
        Array.Copy(buffer, newBuffer, buffer.Length); 
        newBuffer[read] = (byte)nextByte; 
        buffer = newBuffer; 
        read++; 
      } 
    } 
    // Buffer is now too big. Shrink it. 
    byte[] ret = new byte[read]; 
    Array.Copy(buffer, ret, read); 
    return ret; 
  } 

Теперь я уточню свою проблему лучше.

Распакуйте файл, используя FileStream, и BZip2 в порядке, все в порядке.

Проблема заключается в следующем:

Считайте толстый большой файл на диске (> 500 МБ) в байте [] и отправьте байты в Response (asp.net) для его загрузки.

При использовании

http://www.yoda.arachsys.com/csharp/readbinary.html

public static byte[] ReadFully

Я получаю ошибку: OutOfMemoryException ...

Если лучше BufferedStream, чем Stream (FileStream, MemoryStream, ...) ??

Используя BufferedStream, я могу прочитать большой файл 700 МБ ?? (любой пример исходного кода с использованием BufferedStream для загрузки большого файла)

Я думаю, это вопрос: а не "как прочитать файл 500 МБ в память?" , Но "как отправить большой файл в поток ответов ASPNET?"

Я нашел этот код Cheeso:

using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))  
{  
   Response.BufferOutput= false;   // to prevent buffering 
   byte[] buffer = new byte[1024]; 
   int bytesRead = 0; 
   while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)  
   { 
       Response.OutputStream.Write(buffer, 0, bytesRead); 
   } 
}

Это хороший код ?? какие-либо улучшения для высокой производительности?

Коллега скажи мне, используй

Response.TransmitFile(filePath);

Теперь еще один вопрос, лучше TransmitFile или код Cheeso ??

Много лет назад в журнале msdn появилась отличная статья об этом, но я не могу получить к ним доступhttp://msdn.microsoft.com/msdnmag/issues/06/09/WebDownloads/,

Обновить: Вы можете получить доступ с помощьюВеб-архив в ссылке:https://web.archive.org/web/20070627063111/http://msdn.microsoft.com/msdnmag/issues/06/09/WebDownloads/

Любые предложения, комментарии, пример исходного кода ??

Ответы на вопрос(3)

Ваш ответ на вопрос