.net core 下的HttpClient、WebClient性能测试

有许多服务需要拉取api接口数据,因此后端开发少不了对Http访问请求进行封装,最主要的应用方式莫过于采用WebClient进行封装,简单易用;而.net core微软官方推荐的是HttpClient和HttpClientFactory,到底哪个性能更加强劲呢?你是否和我一样也存在同样的疑惑?

Post请求代码

不考虑异常的处理,这里的代码量看起来差不多哎~,
使用WebClient代码如下:

//对象 args
var postData = JsonConvert.SerializeObject(args);
var client = new WebClient { };
client.Headers.Add("Content-Type", "application/json");
byte[] responseBytes;
responseBytes = client.UploadData(uri, "POST", Encoding.UTF8.GetBytes(postData));
var responseString = Encoding.GetEncoding("utf-8").GetString(responseBytes);
var response = JsonConvert.DeserializeObject<Tout>(responseString);

使用HttpClient代码如下:

private static HttpClient _client = new HttpClient();
//下面是主要请求
var postData = JsonConvert.SerializeObject(args);
byte[] responseBytes;
using (var content = new StringContent(postData, Encoding.UTF8, "application/json")){var msg = await _client.PostAsync(uri, content);responseBytes = await msg.Content.ReadAsByteArrayAsync();}var responseString = Encoding.GetEncoding("utf-8").GetString(responseBytes);var response = JsonConvert.DeserializeObject<Tout>(responseString);

性能测试

从上面的代码可以看到一个采用了同步方式请求远程服务器,而HttpClient是采用异步方式请求远程服务器。感觉在处理大并发上,异步方式消耗的线程数量更少,因为我使用的是50并发测试,并没有发现开启的线程数量有差异,均为55个线程(我是在老的api项目上增加的api接口来进行测试的,所以许多线程可能是asp.net core开启的)。

祭出Jmeter,开启50线程的并发测试。
一番测试,剔除预热请求,结果如下:
webclient:

httpclient:

看起来HttpClient有一点点的优势。反复测试几次,有时候webclient也有优势,因此总体上看旗鼓相当。

连接句柄

说好的HttpClient的优势呢?
监控了服务器的cpu和内存,均未发现太多的差异。然而当分析连接数时,忽然发现HttpClient用的连接time_wait数量远远低于WebClient。

# WebClient 使用情况
LISTEN 21
CLOSE_WAIT 13
ESTABLISHED 47
FIN_WAIT2 2
TIME_WAIT 769
# HttpClient 使用情况
LISTEN 21
CLOSE_WAIT 11
ESTABLISHED 48
TIME_WAIT 49

看起来HttpClient共享连接的优化做的还是不错的!

小结

HttpClientFactory在这里没有测试,不过我单独写了个控制台测试了下,其性能略微比HttpClient低一点点,可能是重用消耗了时间,但理论上其内存消耗应该更低。

到底采用WebClient还是HttpClient封装,亲们,自己看着办吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京一公交车发生爆炸 疑为乘客携带药品起反应

勘察人员从公交车里取出可疑爆炸物。薛珺摄点击查看其它图片昨日下午&#xff0c;一辆850路公交车行驶在阜成路时发生爆炸。5名乘客经检查均无大碍。   警方怀疑是乘客所携类似血清的药品引发化学反应所致。   事故现场在八里庄桥上&#xff0c;昨日下午5时许&#xff0c;一…

给定两个二叉树T和S,判断S是否为T的子树

2019独角兽企业重金招聘Python工程师标准>>> #include<iostream> #include <stdlib.h> using namespace std; struct node{int data;node* leftchild;node* rightchild; };bool isSubtree(node* root1,node* root2){if(root2NULL)return true;if(root1N…

ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!

离写上一篇经验总结 ABP Framework 研习社经验总结&#xff08;6.28-7.2&#xff09;&#xff0c;已经过去两周。ABP Framework 研习社&#xff08;QQ群&#xff1a;726299208&#xff09; 最近两周&#xff0c;又迎来了很多新伙伴&#xff0c;成员数量上升至300。从大家的关注…

见识过世界的强大,才能拥有掌握世界的力量

▲ 点击查看在假期的时候&#xff0c;很多家长会选择带孩子一起出去旅游玩耍。在这个过程当中&#xff0c;家长们可能经常都会被孩子各种稀奇古怪的问题给包围住。“这个车为什么能跑的那么快&#xff1f;“这棵树是什么树&#xff0c;为什么它长得比其他树要高&#xff1f;”…

FastTunnel - 打造人人都能搭建的内网穿透工具

FastTunnel是用.net core开发的一款跨平台内网穿透工具&#xff0c;它可以实现将内网服务暴露到公网供自己或任何人访问。与其他穿透工具不同的是&#xff1a;FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架&#xff0c;任何人都可以基于该框架二次开发&#x…

一招搞定高等数学! | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅瓜皮儿十三妹没品图一张图让你们看看鲨鱼的血液循环系统到底有多复杂普外科曾医生小猪佩奇其实是“巨猪佩奇”小猪佩奇真实身高为7.1英尺也就是2.16米但她在家还不是最高的一只浪鸭水陆两栖的自行车它出现在1932年的巴黎街头因为加装了…

WPF 表格控件 ReoGrid 的简单使用

WPF 表格控件 ReoGrid 的简单使用目录一、概述二、安装三、添加控件四、加载 Excel五、属性设置六、支持触摸滚动七、其它操作1、显示和隐藏列2、显示特定字体八、资源链接独立观察员 2021 年 7 月 9 日一、概述ReoGrid 是一个开源的表格控件库&#xff0c;支持 Winform 和 WPF…

史上最牛空姐,从飞机上掉下愣是没摔死

全世界只有3.14 % 的人关注了青少年数学之旅珠穆朗玛峰最新的测量高度为8844米&#xff0c;人是血肉之躯&#xff0c;一旦从这么高的地方掉下来&#xff0c;别说生还了&#xff0c;能有个全尸就不错了。但是&#xff0c;历史上却有这么以为超级幸运的女人&#xff0c;她从比珠穆…

nginx对websocket的支持及uliweb chatroom的测试

2019独角兽企业重金招聘Python工程师标准>>> 在尝试在uliweb中使用gevent开发聊天室时&#xff0c;已经在网上搜到nginx是支持websocket的代理的&#xff0c;不过应该不支持集群模式。不过当时没有试过&#xff0c;今天试了一下&#xff0c;在普通的反向代理是没有问…

为什么祖国没有农历生日? | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅假期计划路线所以为什么没有农历生日所以这个到底是什么字&#xff1f;身体不适&#xff0c;去了趟医院那医生怎么说&#xff1f;......你还敢说养我吗&#xff1f;&#xff08;图源网络&#xff0c;侵权删&#xff09;

ios中amplify配置configure_Nginx源码编译安装及配置文件初步学习

通过源码编译安装。nginx.org #官网地址 # 安装过程 wget http://nginx.org/download/nginx-1.18.0.tar.gz -P /usr/src # tar文件用tar命令解压 tar -zxvf nginx-1.18.0.tar.gz关于wget的-P参数&#xff0c;manual中的解释是prefix&#xff0c;Set directory prefix …

演示: 动态NAT完成网络地址翻译

演示&#xff1a; 动态NAT完成网络地址翻译技术交流与答疑请加入群&#xff1a;1952289演示目标&#xff1a;使用动态NAT完成对私有网络的地址翻译。演示环境&#xff1a;如下图9.63所示。演示背景&#xff1a;该演示环境保持PAT演示环境的网络基础配置&#xff0c;然后使用动态…

.NET测试用例写的好不好?让变种来测试一下!

为了保证代码能够正常工作&#xff0c;我们常常编写了大量单元测试&#xff0c;并且代码覆盖率也做到了100%。但是在生产环境运行时还是会出问题&#xff01;为什么&#xff1f; 这是因为你没有进行变异测试&#xff01;变异测试变异测试就是把bug&#xff08;变种mutant&#…

你根本想象不到,学霸到底经历过什么

全世界只有3.14 % 的人关注了青少年数学之旅在微信的订阅号中&#xff0c;每人最多有12个常读公众号。可公众号这么多&#xff0c;哪些公众号值得关注呢&#xff1f;今天给大家推荐的几个公众号&#xff0c;不仅生产优质的时效性内容&#xff0c;还会提供各种多元化的内容角度&…

买基金如何开户

开户主要有两种途径&#xff1a;&#xff08;1&#xff09;投资者通过深交所交易系统认购、买入或卖出上市开放式基金须使用深圳A股账户或深圳证券投资基金账户&#xff08;以下简称“深圳证券账户”&#xff09;。投资者可通过中国结算公司深圳分公司的开户代理机构&#xff0…

历史上最怪异的23种飞行器,设计者脑子里都想什么了

全世界只有3.14 % 的人关注了青少年数学之旅历史的长河中有无数稀奇古怪&#xff08;呆萌&#xff09;的发明被无情淘汰&#xff0c;而飞行器的发明可谓人类探索道路上尤为浓烈的一笔&#xff0c;过去的110多年里&#xff0c;空中就曾出现以下23中古怪的飞行器。下面这张图比较…

NET问答: 如何让 HttpClient 支持 Http 2.0 协议?

咨询区 Justin Lessard&#xff1a;我的一个项目需要支持 Http 2.0 进行数据的收发&#xff0c;目前用的项目版本是 .NET Core 2.2&#xff0c;我选型了 HttpClient&#xff0c;但是我发现一个问题&#xff0c;在生产环境中的程序返回的 response 版本一直都是 Http 1.1&#x…

邮件发送类,支持Gmail

邮件发送类,支持Gmail&#xff0c;使用简单方便 usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net;usingSystem.Net.Mail;namespaceLZ2007.Function...{ /**//// <summary> /// 邮件发送类 /// <CreateDate>2007/07/02<…

和爸爸的聊天永远是个谜。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】【15】【16】【17】【18】【19】【20】【21】【22】【23】【24】&#xff08;图源网络&#xff0c;侵权删&#xff09;

FZU Problem 2030 括号问题

Problem Description 给出一个字符串&#xff0c;其中包括3种字符: ‘(‘, ‘)’, ‘?’.其中?表示这个字符可以是’(‘也可以是’)’. 现在给出字符串S,你可以在’?’处填写’(‘ 或者 ‘)’&#xff0c;当然随意填写得到的序列可能是括号不匹配的。例如”(?”&#xff0c…