我正在尝试从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中会是10 MB吗?
或者一旦我们开始阅读,它会开始消耗内存吗? bytesRead = strm.Read(buffer, 0, BUFFER_SIZE);
答案 0 :(得分:3)
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
}