2017-04-13 142 views
0

我有一個巨大的大型數據集,其中包含近700列,我使用GZipStream進行壓縮和解壓縮。數據壓縮後的壓縮效果很好,尺寸接近40mb,但在解壓縮過程中出現「系統內存不足」異常。 I,M用下面的代碼壓縮及解壓縮: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和內存的高度,不斷running..we已經因爲它不斷使用大量的內存和CPU – saadsaf

+0

我用同樣的方法你的問題是運行,強制停止它基於關閉,我測試了超過100MB的數據,它運行良好。你的實現實際上並沒有壓縮任何東西,這就是你首先遇到問題的原因 –