.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;一…

mysql 常用权限_MySQL的权限有哪些

2015-09-04 回答不知道你问的什么意思&#xff0c;mysql中用户的权如下&#xff1a;select_priv。确定用户是否可以通过select命令选择数据。insert_priv。确定用户是否可以通过insert命令插入数据。update_priv。确定用户是否可以通过update命令修改现有数据。delete_priv。确…

给定两个二叉树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;”…

java导出mysql数据库失败_利用Java进行MySql数据库的导入和导出

利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令。MySql导出数据库的命令如下&#xff1a;mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName > exportPath利用Java调用命令窗口执行命令来进行MySql导入数据库一般…

使用timer控件创建一个简单的报警程序

简介&#xff1a;当我使用计算机工作时&#xff0c;我总是如此的专心致志&#xff0c;以至于每当我过了“一会儿”去看时间时&#xff0c;发现已经过了三个小时&#xff0c;而我却完全没有意识到&#xff01;所以我决定使用我从Code Project学来的C#技术&#xff0c;来创建一个…

jstl格式化日期

<% page contentType"text/html" pageEncoding"GBK"%> <% page import"java.util.*"%> <% taglib prefix"fmt" uri"http://java.sun.com/jsp/jstl/fmt"%> <html><head><title>国际化标…

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

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

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

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

二、穷举搜索法

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验&#xff0c;并从众找出那些符合要求的候选解作为问题的解。 【问题】 将A、B、C、D、E、F这六个变量排成如图所示的三角形&#xff0c;这六个变量分别取[1&#xff0c;6]上的整数&#xff0c;且均不相同。求…

恢复Ext3下被删除的文件

下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件。假设我们有一个文件名叫 ‘test.txt’$ls -il test.txt15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt注意&#xff1a;: “-il” 选项表示显示文件的i-node号&#xff08;15&#xff09;&#xff0c;如果你…

WPF 表格控件 ReoGrid 的简单使用

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

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

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

mysql主主同步冲突_MySQL主主同步主键冲突处理

两台数据库都报slave同步失败了&#xff0c;先说明一下环境&#xff0c;架构&#xff1a;lvskeepalivedamoebamysql&#xff0c;主主复制&#xff0c;单台写入&#xff0c;主1:192.168.0.223(写)主2:192.168.0.230好吧&#xff0c;先show slave status \G看一下同步失败的具体报…

[未来的购碟指南]送给那些以后想收藏真人电影DVD的菜鸟们

随着真人电影在全世界的上映&#xff0c;全世界又掀起了一股新的TF热。对于我们这些铁杆FANS来说&#xff0c;除了肯定要去电影院观影之外&#xff0c;肯定还要收藏一张这部电影的DVD&#xff0c;以达到圆满。本人从2002年开始收藏各种DVD&#xff0c;因此这几年中&#xff0c;…

来聊聊正则表达式

概念正则表达式 是一种匹配输入文本的模式。.Net框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。Regex 类Regex 类用于表示一个正则表达式。下表列出了 Regex 类中一些常用的方法&#xff1a;1 public bool IsMatch( string input ) 指示 R…

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 …