gpt4 book ai didi

c# - Stream 的困惑

转载 作者:行者123 更新时间:2023-11-30 22:22:21 24 4
gpt4 key购买 nike

我正在尝试从 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);
}

一旦我们像 response.BinaryWrite(file.OpenBinary()); 那样赋值,我们是否在 strm 对象中获取整个流(开始消耗 RAM)?假设文件是​​ 10MB,那么这个 strm 在 RAM 中将是 10MB?

或者一旦我们开始阅读它就会开始消耗内存? bytesRead = strm.Read(buffer, 0, BUFFER_SIZE);

最佳答案

Stream 是一个管道,而不是一个桶;它(通常)不“包含”数据——它只是管理对数据的访问。就示例而言,您的应用在任何时候加载的数据都是 BUFFER_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
}

关于c# - Stream 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13876444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com