为什么我的应用程序'的内存占用爆炸当我写一个多部分

本文关键字:多部 一个 应用程序 我的 内存 为什么 | 更新日期: 2023-09-27 18:08:09

我有这个c#。NET 4.0)应用程序,它使用多部分表单请求从文件系统上传本地文件。下面是请求流:

Stream stream = webrequest.GetRequestStream();
下面是我如何使用流上传文件:
byte[] headerbytes = Encoding.UTF8.GetBytes(header);
stream.Write(headerbytes, 0, headerbytes.Length);
using (FileStream fileStream = new FileStream(file.FullName, FileMode.Open, FileAccess.Read))
{
    byte[] buffer = new byte[1024];
    int bytesRead = 0;
    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
    { stream.Write(buffer, 0, bytesRead); }
}
byte[] newlineBytes = Encoding.UTF8.GetBytes("'r'n");
stream.Write(newlineBytes, 0, newlineBytes.Length);

('流'稍后在代码中关闭)

我的应用程序运行,它徘徊在大约20MB内存的进程。当我上传一个100MB的文件时,我的应用程序跳转到120MB的RAM。当我上传一个700MB的文件时,我的应用程序跳转到720MB的RAM。它似乎也没有得到垃圾收集。我分析了应用程序和stream.Write()是导致内存分配过多的原因。

这是泄漏吗?我能做什么?

为什么我的应用程序'的内存占用爆炸当我写一个多部分

方法GetRequestStream返回的流似乎默认情况下是写缓冲的。再加上从磁盘读取数据的速度相对较快,而向网络接口写入数据的速度相对较慢,这样就可以在内存中存储几乎完整的文件。

您可以尝试通过调用Flush方法来强制请求流将数据写入底层网络流,或者尝试将WebRequestAllowWriteStreamBuffering属性设置为false