如何消除CA2202警告(CA2202: Microsoft.Usage:在方法“Compression.InternalDecompress(byte [])”中,对象“compressedStream”可以被处理多次。为了避免生成System.ObjectDisposedException,您不应该在一个对象上调用Dispose超过一次)从以下代码:
using (var compressedStream = new MemoryStream(inputData))
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
我曾尝试去除 "using" 语句,并将其替换为 try/finally 模式,但是我收到了 CA2000 错误提示(CA2000 : Microsoft.Reliability : 在方法 'Compression.InternalDecompress(byte[])' 中,当所有对该对象的引用超出范围时调用 System.IDisposable.Dispose)。我已经尝试像下面这样替换上面的代码:
MemoryStream decompressedData = null;
MemoryStream stream = null;
GZipStream decompressor = null;
try
{
decompressedData = new MemoryStream();
stream = new MemoryStream(inputData);
decompressor = new GZipStream(stream, CompressionMode.Decompress, false);
stream = null;
int bytesRead = 1;
int chunkSize = 4096;
byte[] chunk = new byte[chunkSize];
while ((bytesRead = decompressor.Read(chunk, 0, chunkSize)) > 0)
{
decompressedData.Write(chunk, 0, bytesRead);
}
decompressor = null;
return decompressedData.ToArray();
}
finally
{
if (stream != null)
{
stream.Dispose();
}
if (decompressor != null)
{
decompressor.Dispose();
}
if (decompressedData != null)
{
decompressedData.Dispose();
}
}