解压后GZipStream内存不足异常

时间:2017-04-13 05:36:33

标签: c# .net c#-4.0 gzip gzipstream

我有一个包含近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不是最佳/适合大型数据集,请推荐任何其他压缩库。提前致谢

1 个答案:

答案 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;
    }
}