我想验证一下我的ZipArchive。为此,我将所有条目复制到MemoryStream。我只想知道我是否有能力打开和复制我的条目。
public void ZipVerification(Stream stream)
{
using (var memoryStream = new MemoryStream())
using (var zip = new ZipArchive(stream, ZipArchiveMode.Read))
{
foreach (var entry in zip.Entries)
{
using (var entryStream = entry.Open())
{
entryStream.CopyTo(memoryStream);
}
}
}
}但是这个方法消耗了我的记忆。是否使用Stream.Null而不是MemoryStream更好?
public void ZipVerification(Stream stream)
{
using (var zip = new ZipArchive(stream, ZipArchiveMode.Read))
{
foreach (var entry in zip.Entries)
{
using (var entryStream = entry.Open())
{
entryStream.CopyTo(Stream.Null);
}
}
}
}发布于 2016-11-17 15:44:41
复制到空流将工作,正如您所发现的,不需要额外的内存来保存流中的数据。
您可以检查底层流的Position,以确定它实际上正在消耗该流:
public static void ZipVerification()
{
using (var zip = new ZipArchive(stream, ZipArchiveMode.Read))
{
// Print stream position before.
Console.WriteLine(stream.Position);
foreach (var entry in zip.Entries)
{
using (var entryStream = entry.Open())
{
entryStream.CopyTo(System.IO.Stream.Null);
}
}
// Print stream position after.
Console.WriteLine(stream.Position);
}
}https://stackoverflow.com/questions/40625521
复制相似问题