C# Stream.CopyTo(Stream.Null)

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)) {

我想核实一下我的背包。为此,我将所有条目复制到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);
                }
            }
        }
    }

复制到空流将起作用,并且正如您所发现的,不需要额外的内存来保存流中的数据

您可以检查底层流的
位置
,以查看它是否实际在使用流:

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的过程中会发生什么。