C# 关于溪流的困惑

C# 关于溪流的困惑,c#,stream,C#,Stream,我正在尝试从SharePoint下载文件。 在做了一些研究之后,我得到了这个结论,它说如果我们使用缓冲区,性能会更好 备注-文件为SPFile using (System.IO.Stream strm = file.OpenBinaryStream()) { byte[] buffer = new byte[BUFFER_SIZE]; int bytesRead; do { bytesRead = strm.Read(buffer, 0, BUFF

我正在尝试从SharePoint下载文件。 在做了一些研究之后,我得到了这个结论,它说如果我们使用缓冲区,性能会更好

备注-文件为SPFile

using (System.IO.Stream strm = file.OpenBinaryStream())
{
    byte[] buffer = new byte[BUFFER_SIZE];
    int bytesRead;
    do
    {
        bytesRead = strm.Read(buffer, 0, BUFFER_SIZE);
        response.OutputStream.Write(buffer, 0, bytesRead);
        response.Flush();
    } while (bytesRead > 0);
} 
一旦我们指定like
response.BinaryWrite(file.OpenBinary()),我们是否在strm对象中获得整个流(开始使用RAM)?假设这个文件是10MB,那么这个strm的内存是10MB


或者一旦我们开始阅读,它就会开始消耗内存
bytesRead=strm.Read(缓冲区,0,缓冲区大小)

一条
是一条管道,而不是一个桶;它并不(通常)“包含”数据——它只是管理对数据的访问。在本例中,应用程序在任何时候加载的数据都是
BUFFER\u SIZE
字节(加上任何其他层使用的任何其他缓冲区)

您也不需要在每次写入时都执行
Flush()
(尽管最后的
Flush()
可能是合适的)

你所拥有的一切都是美好的;我想说的唯一一件事是,您可以在最新版本的.NET中简化这一点:

using (System.IO.Stream strm = file.OpenBinaryStream())
{
    strm.CopyTo(response);
    // response.Flush(); // optional: only included because it is in the question
}

>谢谢你的回答。如果我直接执行response.BinaryWrite(file.OpenBinary());而不是循环?它会有内存问题吗?