C# 使用HttpWebRequest上载大文件(AllowWriteSteamBuffering无法解决此问题)

C# 使用HttpWebRequest上载大文件(AllowWriteSteamBuffering无法解决此问题),c#,http,post,file-upload,upload,C#,Http,Post,File Upload,Upload,我的问题如下: 我目前正在广泛测试我的应用程序,现在我知道它无法处理大文件的上传。当然,我告诉自己这个问题,并且AllowWriteStreamBuffering-属性已经设置为false,但是当我尝试上载大小约为700 Mb的文件时,我的电脑冻结(我有4 Gb RAM,并且没有MemoryOutOfRangeException)。我既不能使用HttpClient-类,因为我必须提供对.NET Framework 4的支持,也不能阻止上载,因为目标服务器不支持这种上载。 我认为内存问题是因为我已

我的问题如下: 我目前正在广泛测试我的应用程序,现在我知道它无法处理大文件的上传。当然,我告诉自己这个问题,并且
AllowWriteStreamBuffering
-属性已经设置为false,但是当我尝试上载大小约为700 Mb的文件时,我的电脑冻结(我有4 Gb RAM,并且没有
MemoryOutOfRangeException
)。我既不能使用
HttpClient
-类,因为我必须提供对.NET Framework 4的支持,也不能阻止上载,因为目标服务器不支持这种上载。 我认为内存问题是因为我已经发送(上传时)的数据仍然分配在RAM中。 这些代码行负责:

while ((bytesRead = fileStream.Read(fileBuffer, 0, fileBuffer.Length)) != 0)
{
    requestStream.Write(fileBuffer, 0, (int)bytesRead);
}
如何删除已发送但仍在使用内存的数据?
如果这不是问题的原因,那么我该如何解决呢?

我尝试了几种方法,一种内部分块上传(但是
HttpWebRequest
chunked
-属性是
false
)可以工作:

long bytesRead=0;
长拆分字节=1000000;//≈ 1 Mb
int数据包=(int)Math.天花((double)file.FileSize/splitBytes);
FileStream FileStream=newfilestream(file.Path,FileMode.Open,FileAccess.Read);
byte[]fileBuffer=新字节[splitBytes];
Stream requestStream=request.GetRequestStream();
Write(postBuffer,0,postBuffer.Length);
while(fileStream.Read(fileBuffer,0,fileBuffer.Length)!=0)
{
如果(字节读取+拆分字节)“后缓冲区”是什么?
            long bytesRead = 0;
            long splitBytes = 1000000;  // ≈ 1 Mb
            int dataPacks = (int)Math.Ceiling((double)file.FileSize/splitBytes);
            FileStream fileStream = new FileStream(file.Path, FileMode.Open, FileAccess.Read);
            byte[] fileBuffer = new byte[splitBytes];
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(postBuffer, 0, postBuffer.Length);
            while (fileStream.Read(fileBuffer, 0, fileBuffer.Length) != 0)
            {
                if (bytesRead + splitBytes <= file.FileSize)
                {
                    requestStream.Write(fileBuffer, 0, fileBuffer.Length);
                    fileStream.Flush();
                    bytesRead += splitBytes;
                }
                else
                {
                    requestStream.Write(fileBuffer, 0, (int)(file.FileSize - bytesRead));
                    fileStream.Flush();
                    bytesRead += (file.FileSize - bytesRead);
                }
            }