本文介绍了内存不够的异常使用的HttpWebRequest当到流大文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我用一个大文件的Http.Put时得到一个内存溢出异常。我使用异步模型中所示的代码。我想数据的8K块发送到Windows 2008 R2服务器。当我尝试写超过536868864字节的数据块的异常持续发生。在下面的代码片段代码中的requestStream.Write方法发生异常。
寻找原因?
请注意:较小的文件都将确定。如果我写一个本地的FileStream逻辑也适用。在Win 7旗舰版客户端的计算机上运行VS 2010,.NET 4.0。
HttpWebRequest的要求=(HttpWebRequest的)WebRequest.Create(宀://网站/文件服务器/文件名);
request.Method = WebRequestMethods.Http.Put;
request.SendChunked = TRUE;
request.AllowWriteStreamBuffering = TRUE;
...
request.BeginGetRequestStream(新的AsyncCallback(EndGetStreamCallback),状态);
...
INT块= 8192; //其它值给出相同的结果
....
私有静态无效EndGetStreamCallback(IAsyncResult的AR){
长限制= 0;
长文件长度;
的HttpState状态=(的HttpState)ar.AsyncState;
流requestStream = NULL;
//结束异步调用获得请求的流。
尝试{
requestStream = state.Request.EndGetRequestStream(AR);
//文件内容复制到请求流。
的FileStream流=新的FileStream(state.FileName,FileMode.Open,FileAccess.Read,FileShare.None,块,FileOptions.SequentialScan);
BinaryReader binReader =新BinaryReader(流);
=文件长度stream.Length;
//设置位置到流的开头。
binReader.BaseStream.Position = 0;
字节[] = fileContents新的字节[块]
//从缓冲区
读取文件时(限<文件长度)
{
fileContents = binReader.ReadBytes(块);
//下面两行尝试写入网络和服务器
requestStream.Write(fileContents,0,块); //导致内存耗尽之后536868864字节
requestStream.Flush(); //我得到有或没有冲洗
+限块=相同的结果;
}
//重要提示:在发送请求之前关闭请求流。
stream.Close();
requestStream.Close();
}
}
解决方案
您显然有。当 AllowWriteStreamBuffering
是真正
,它缓冲的所有数据写入请求的!因此,解是该属性设置为假
:
这篇关于内存不够的异常使用的HttpWebRequest当到流大文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!