我有一个包含近700列的大型数据集,我使用GZipStream进行压缩和解压缩。压缩后的压缩工作正常,数据集的大小几乎为40mb,但在解压缩期间我得到“系统内存不足”异常。我,使用下面的代码进行压缩和解压缩:
压缩:
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 :(得分:1)
您的问题源于您首先压缩数据的方式,看看下面的代码,如果您有任何问题,请告诉我。
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;
}
}