C# Stream.CopyTo(Stream.Null)
我想核实一下我的背包。为此,我将所有条目复制到MemoryStream。我只想知道我是否有能力打开和复制我的条目C# Stream.CopyTo(Stream.Null),c#,stream,C#,Stream,我想核实一下我的背包。为此,我将所有条目复制到MemoryStream。我只想知道我是否有能力打开和复制我的条目 public void ZipVerification(Stream stream) { using (var memoryStream = new MemoryStream()) using (var zip = new ZipArchive(stream, ZipArchiveMode.Read)) {
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);
}
}
}
}
复制到空流将起作用,并且正如您所发现的,不需要额外的内存来保存流中的数据 您可以检查底层流的
位置
,以查看它是否实际在使用流:
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);
}
}
复制到空流将起作用,并且正如您所发现的,不需要额外的内存来保存流中的数据 您可以检查底层流的
位置
,以查看它是否实际在使用流:
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);
}
}
我不确定。MSDN只告诉我们如何调用Read或Write on Stream.Null,而没有告诉我们在复制到Null的过程中会发生什么。我不确定。MSDN只告诉我们如何调用Read或Write on Stream.Null,而没有告诉我们在复制到Null的过程中会发生什么。