2

我有一个函数uploadfile(),在这个函数中我分块上传文件:

Stream writer = request.GetRequestStream();
byte[] bufferUploadSize = new byte[4096];//ex.
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
int bytesRead = 0;
while ((bytesRead = fileStream.Read(bufferUploadSize,0, bufferUploadSize.Length)) != 0)
{
    writer.Write(bufferUploadSize, 0, bytesRead);
}
fileStream.Close();

我这样做没有错误,但是当我在 Windows 任务管理器中观看我的程序时,我意识到我的程序使用的内存会增加,直到文件大小。例如,当我上传一个 1GB 的文件时,内存会一点一点地增加,直到 1GB。为什么?

我可以将代码更改为仅使用 40KB 而不是 1GB RAM 吗?

4

1 回答 1

3

尝试设置request.AllowWriteStreamBuffering = false;

这是关于它的 MSDN 文档:HttpWebRequest.AllowWriteStreamBuffering 属性

这是该页面的注释:

将 AllowWriteStreamBuffering 设置为 true 可能会在上传大型数据集时导致性能问题,因为数据缓冲区可能会使用所有可用内存。

于 2013-11-06T18:57:57.397 回答