2013-02-12 35 views
0

我在這段C#代碼中遇到了OutOfMemoryException問題。OutOfMemoryException和MemoryStream()

private void SaveZip(IDataReader reader, string header, string fileName, Ionic.Zip.ZipFile zip) 
    { 
     using (var stream = new MemoryStream()) 
     { 
      using (var writer = new StreamWriter(stream, Encoding.ASCII)) 
      { 
       writer.WriteLine(header); 
       while (reader.Read()) 
       { 
        writer.WriteLine(reader.GetString(0)); //exception occurs here 
       } 

       writer.Close(); 
      } 

      zip.AddEntry(fileName, stream.ToArray()); 
     } 
    } 

該代碼嘗試將DataReader對象寫入文件,該文件在過程結束時被壓縮。問題是Reader包含一大組數據,大約150MB,當我嘗試在內存中寫入數據流時,它會產生異常。 我該如何解決這個問題?

感謝您的幫助!

+0

此代碼是否適用於較小的數據集? – 2013-02-12 17:47:23

回答

0

如果您沒有足夠的內存將數據處理到內存緩衝區,那麼您必須將其存儲在內存的一側,如磁盤。例如將MemoryStream替換爲FileStream

+0

好吧,但它花費了很多時間,不是嗎?有沒有辦法分割數據? – user2050468 2013-02-12 22:58:43

+0

你可以使用'BufferedStream'來包裝一個'FileStream'來擁有最大的內存緩衝區大小。 – 2013-02-13 14:00:25