WebClient、HttpWebRequest API太老旧,在.net core下已经不推荐使用了,在.net core要使用HttpClient。
其实HttpClient在.net framework下也有,下面的代码:
Stopwatch sw = new Stopwatch();
sw.Start();
using (HttpClient httpclient = new HttpClient())
{
for(int i=0;i<50;i++)
{
var html = httpclient.GetAsync("http://www.rupeng.com").Result;
}
}
sw.Stop();
Console.WriteLine("耗时:"+sw.Elapsed);
在.net framework下运行需要12秒。但是放到.net core下运行竟然耗用了102秒:
耗用102秒
经过研究发现,.net core下的HttpClient默认会检测计算机的代理设置,所以很慢,只要禁用UseProxy就可以了。
Stopwatch sw = new Stopwatch();
sw.Start();
HttpClientHandler handler = new HttpClientHandler();
handler.UseProxy = false;//不加这个会非常慢
using (HttpClient httpclient = new HttpClient(handler))
{
for(int i=0;i<50;i++)
{
var html = httpclient.GetAsync("http://www.rupeng.com").Result;
}
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
这样运行结果就正常了:
耗用11秒
如鹏网培训班内部的聊天工具中由于要和OpenAPI服务器以及聊天云服务器走Http通讯,一开始没有设置UseProxy = false,获取历史消息、登录等操作特别卡,有时候要卡一分多钟,进行这样一个简单设置之后就速度很快了。
我搞的两个开源项目也同步修复了这个问题:
1)融云聊天 .net core
SDK:https://github.com/yangzhongke/rongim.server.netcore
2)又拍云 .net core
SDK:https://github.com/yangzhongke/UpYun.NETCore