2013-02-12 2 views
0

이 C# 코드에서 OutOfMemoryException 문제가 있습니다.OutOfMemoryException with 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

이 코드는 더 작은 데이터 세트로 작동합니까? –

답변

0

메모리가 부족하여 메모리 버퍼에 데이터를 처리 할 수없는 경우 디스크처럼 메모리 측면에 저장해야합니다. 예 : MemoryStreamFileStream으로 바꾸십시오.

+0

하지만 시간이 많이 걸리지 않습니까? 데이터를 분할하는 방법이 있습니까? – user2050468

+0

'BufferedStream'을 사용하여'FileStream'을 래핑하여 최대 크기의 메모리 버퍼를 가질 수 있습니다. –