.net4.5.2,window7系统下,使用httpclient每秒发送一个请求,代码如下
var fireAndForget = httpClient.GetAsync(entity.Url);
然后发现进程的内存在几分钟后就越来越多,于是我调试,截取内存快照,原因是有个对象类型是httpcontext+limitmemorystream的越来越多,最后导致内存也越来越多,请问是什么原因导致的
你能贴下完整点的代码么?一秒发送一个这种场景是不管前一个是否返回后面都继续发么?
谢谢你的回答,对,代码是
var httpClient = new HttpClient(
new HttpClientHandler
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
UseCookies = false,
});
httpClient.DefaultRequestHeaders.Connection.Add("close");
httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
httpClient.DefaultRequestHeaders.Remove("UserAgent");
httpClient.DefaultRequestHeaders.Add("UserAgent", DataDefine.UserAgentDefine.GetRandomUserAgent());
httpClient.Timeout = TimeSpan.FromMinutes(1);
while (true) {var fireAndForget = httpClient.GetAsync("https://www.baidu.com");}
,网络正常,然后内存就不停地增长,为什么会这样子
循环里有睡眠一秒task.delay(1000).wait()
@雙孖星:
while(true){
var fireAndForget = httpClient.GetAsync("https://www.baidu.com");
fireAndForget.delay(1000).wait();
}
这样?
@Daniel Cai:
while (true)
{
var fireAndForget = httpClient.GetAsync("https://www.amazon.com/product-reviews/B000G72384");
Task.Delay(1000).Wait();
}
@雙孖星:
这样用的姿势感觉不太对,你换成
Task.Factory.StartNew(async ()=>{
while(true)
{
await httpClient.....;
await Task.Delay(1000);
}
});
PS:返回这个task,外边去await它就可以了。确保这个方法没有重入
@Daniel Cai: 方法没有重入是什么意思,重入有什么影响
@雙孖星:
比如你这个方法对外暴露的签名是
CallxxxSite()
如果你重入了的话(多次调用),那么里面task的数量就会越来越多,而httpclient对象也会增加。
(这段代码不太清楚你的用意,所以不好描述其可能存在的问题)