2

我正在尝试从 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 在 RAM 中会是 10 MB 吗?

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

4

1 回答 1

3

AStream是管道,不是桶;它(通常)不“包含”数据——它只是管理对数据的访问。就示例而言,您的应用程序在任何时候加载的数据都是BUFFER_SIZE字节(加上任何其他层使用的任何其他缓冲区)。

您也不需要Flush()在每次写入时都这样做(尽管Flush()最后的 a 可能是合适的)。

你所拥有的很好;我唯一要说的是,您可以在最新版本的 .NET 中对此进行简化:

using (System.IO.Stream strm = file.OpenBinaryStream())
{
    strm.CopyTo(response);
    // response.Flush(); // optional: only included because it is in the question
}
于 2012-12-14T10:07:49.567 回答