HttpClient下文件下载时内存溢出问题

MetalMax 2016-08-11 01:31:15
先给大家说声谢谢!dotnet版本4.6.1,下面我来描述我遇到的问题:

HttpMessageHandler handler = new HttpClientHandler() { AllowAutoRedirect = false };
HttpClient client = new HttpClient(handler);
//client.MaxResponseContentBufferSize = 1024 * 1024 * 4;

Task<HttpResponseMessage> resultTask = client.GetAsync(url);
HttpResponseMessage httpResponse = resultTask.Result;
httpResponseMessage = httpResponse;
Stream st = httpResponse.Content.ReadAsStreamAsync().Result;
revLen= st.Read(buffer,0, (int)st.Length);
st.Close();
st.Dispose();
client.Dispose();

我有以上这么一段代码,当这段代码循环执行时会出现IIS内存暴涨,最终导致报错(内存溢出错误)。我确保传入的参数buffer数组只有2M,而且只new了一次,请问这个什么问题呢?如果我把这段代码换成以下代码,这个问题就不存在了:下面这段代码依旧循环调用

WebClient webClient = new WebClient();
byte[] data= webClient.DownloadData(url);
Array.Copy(data,0,buffer,0,data.Length);
...全文
570 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Poopaye 2016-08-14
  • 打赏
  • 举报
回复
比如这个 Task<HttpResponseMessage> resultTask = client.GetAsync(url); 后面你就把client释放掉了,我不知道这个task如果尚未完成会发生什么状况,暴走了也说不定
Poopaye 2016-08-14
  • 打赏
  • 举报
回复
引用 4 楼 lqliqing88 的回复:
[quote=引用 3 楼 shingoscar 的回复:] async是异步的意思啊 接着你就获取Result? 那还异步个球啊
。。。。我知道这个是异步,这里不等待我也要在其他地方等待,而且这个业务逻辑处理到这里就是最后一步了。而且这个内存暴涨和异步应该没有关系吧[/quote] 那你有地方把这2个异步操作结束掉吗?
MetalMax 2016-08-14
  • 打赏
  • 举报
回复
引用 3 楼 shingoscar 的回复:
async是异步的意思啊 接着你就获取Result? 那还异步个球啊
。。。。我知道这个是异步,这里不等待我也要在其他地方等待,而且这个业务逻辑处理到这里就是最后一步了。而且这个内存暴涨和异步应该没有关系吧
Poopaye 2016-08-11
  • 打赏
  • 举报
回复
async是异步的意思啊 接着你就获取Result? 那还异步个球啊
MetalMax 2016-08-11
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
revLen= st.Read(buffer,0, (int)buffer.Length);
什么意思?
Forty2 2016-08-11
  • 打赏
  • 举报
回复
revLen= st.Read(buffer,0, (int)buffer.Length);

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧