2017-04-13 7 views
0

私は、圧縮と解凍にGZipStreamを使用して、ほぼ700個のカラムとIを含む大規模な大規模なデータセットを持っています。圧縮はうまく動作し、圧縮後のデータセットのサイズは約40MBですが、復元中は「」というメッセージが表示されます。「システムのメモリが不足しています。 I、圧縮と解凍のためのコードの下に使用しては:mGZipStream圧縮解除時のメモリ不足例外

圧縮:

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を超えるデータでテストしたところ、正常に動作しました。あなたの実装は実際に何かを圧縮していないので、なぜあなたは最初に問題を抱えているのですか? –