2017-04-13 90 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的数据,它运行良好。你的实现实际上并没有压缩任何东西,这就是你首先遇到问题的原因 –