我有这个继承的代码:
private string DecompressData(byte[] data)
{
byte[] decompressedData;
using (MemoryStream ms = new MemoryStream(data))
{
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Decompress))
{
using (MemoryStream resultStream = new MemoryStream())
{
gzip.CopyTo(resultStream);
decompressedData = resultStream.ToArray();
}
}
}
return Encoding.UTF8.GetString(decompressedData);
}
数据数组最大可达1Mb,压缩比可达32倍。然而,我发现此方法的内存使用量大幅增加(有时约为 100Mb)。这是容器任务的一部分,我试图尽可能并行化以充分利用每个容器,但目前看到 OOM 错误。如何重写此代码,以便在下一个流读取输入数据时将其处理掉?或者我可以采取什么不同的方法以更有效的内存方式完成相同的任务?
可以尝试这样的方法来看看它是否使用更少的内存:
private string DecompressData(byte[] data)
{
using (MemoryStream ms = new MemoryStream(data))
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Decompress))
using (StreamReader reader = new StreamReader(gzip, Encoding.UTF8))
{
// Read directly from the GZipStream and decode into a string
return reader.ReadToEnd();
}
}