2017-04-13 1 views
0

저는 압축 및 압축 해제를 위해 GZipStream을 사용하여 거의 700 개의 열과 I, m을 포함하는 방대한 대형 데이터 세트를 보유하고 있습니다. 압축은 잘 작동하고 압축 후 데이터 세트의 크기는 거의 40MB이지만 압축 해제 중 ""시스템에서 "시스템 메모리 부족"이 발생합니다.GZipStream 압축 해제시 메모리 부족 예외

압축 :

public static Byte[] CompressDataSet(DataSet dataset) 
{ 
    Byte[] data; 
    MemoryStream mem = new MemoryStream(); 
    GZipStream zip = new GZipStream(mem, CompressionMode.Compress); 
    dataset.WriteXml(zip, XmlWriteMode.WriteSchema); 
    zip.Close(); 
    data = mem.ToArray(); 
    mem.Close(); 
    return data; 

}

감압 :

public static DataSet DecompressDataSet(Byte[] data) 
{ 
    MemoryStream mem = new MemoryStream(data); 
    GZipStream zip = new GZipStream(mem, CompressionMode.Decompress); 
    DataSet dataset = new DataSet(); 
    dataset.ReadXml(zip, XmlReadMode.ReadSchema); 
    zip.Close(); 
    mem.Close(); 
    return dataset; 

} 

경우 다른 압축 라이브러리를 추천하십시오 GZipStream 나는, 압축 및 압축 해제에 대한 코드 아래 사용하고 있습니다 대규모 대규모 데이터 세트에 적합하지 않습니다. 미리 감사드립니다.

답변

0

처음에는 데이터를 압축하는 방식으로 인해 문제가 발생했습니다. 아래 코드를보고 궁금한 점이 있으면 알려주십시오.

public static Byte[] CompressDataSet(DataSet dataSet) 
{ 
    using (MemoryStream inputStream = new MemoryStream()) 
    using (MemoryStream resultStream = new MemoryStream()) 
    using (GZipStream gzipStream = new GZipStream(resultStream, CompressionMode.Compress)) 
    { 
     dataSet.WriteXml(inputStream, XmlWriteMode.WriteSchema); 
     inputStream.Seek(0, SeekOrigin.Begin); 
     inputStream.CopyTo(gzipStream); 

     gzipStream.Close(); 

     return resultStream.ToArray(); 
    } 
} 

public static DataSet DecompressDataSet(Byte[] data) 
{ 
    using (MemoryStream compressedStream = new MemoryStream(data)) 
    using (GZipStream gzipStream = new GZipStream(compressedStream, CompressionMode.Decompress)) 
    using (DataSet dataset = new DataSet()) 
    { 
     dataset.ReadXml(gzipStream, XmlReadMode.ReadSchema); 
     return dataset; 
    } 
} 
+0

위 규정 approcah 압축은 내가 당신의 질문은 동일한 방법을 사용하고 큰 메모리와 CPU – saadsaf

+0

를 사용하여 실행에 유지로 강제로 중지해야합니다 높은 CPU 및 메모리를 사용하고 running..we 계속 기반으로, 나는 100MB 이상의 데이터로 테스트하고 괜찮 았는데. 귀하의 구현은 실제로 무엇보다도 문제가있는 이유를 압축하지 않습니다. –