有许多服务需要拉取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封装,亲们,自己看着办吧!

.net core 下的HttpClient、WebClient性能测试相关推荐

  1. .Net Core下如何管理配置文件

    一.前言 根据该issues来看,System.Configuration在.net core中已经不存在了,那么取而代之的是由Microsoft.Extensions.Cnfiguration.XX ...

  2. 在asp.net core 下定义统一的入参和出参格式

    在使用.net core 开发Api的过程中,为了统一输入参数的格式,并增加一些全局必须含有的字段,比如:Code,Message,Lang等等,能采取的变通方式还是有几种的,然而都不够优雅,为了需求 ...

  3. 一个.NET Core下的开源插件框架Pluginfactory

    插件模式历史悠久,各种中大型软件基本上都会实现插件机制,以此支持功能扩展,从开发部署层面,插件机制也可实现功能解耦,对于并行开发.项目部署.功能定制等都有比较大的优势. 在.NET Core下,一般我 ...

  4. .NET Core 下的爬虫利器

    爬虫大家或多或少的都应该接触过的,爬虫有风险,抓数需谨慎. 本着研究学习的目的,记录一下在 .NET Core 下抓取数据的实际案例.爬虫代码一般具有时效性,当我们的目标发生改版升级,规则转换后我们写 ...

  5. SeaweedFS在.net core下的实践方案

    一直对分布式的文件储存系统很感兴趣,最开始关注淘宝的TFS(Taobao File System),好像搁浅了,官方地址无法访问,github上面,各种编译问题,无意间发现了SeaweedFS 链接s ...

  6. Net Core下多种ORM框架特性及性能对比

    在.NET Framework下有许多ORM框架,最著名的无外乎是Entity Framework,它拥有悠久的历史以及便捷的语法,在占有率上一路领先.但随着Dapper的出现,它的地位受到了威胁,本 ...

  7. .Net Core下通过Proxy 模式 使用 WCF

    .NET Core下的WCF客户端也是开源的,这次发布.NET Core 2.0,同时也发布了 WCF for .NET Core 2.0.0, 本文介绍在.NET Core下如何通过Proxy 消费 ...

  8. .NET Core下使用gRpc公开服务(SSL/TLS)

    一.前言 前一阵子关于.NET的各大公众号都发表了关于gRpc的消息,而随之而来的就是一波关于.NET Core下如何使用的教程,但是在这众多的教程中基本都是泛泛而谈,难以实际在实际环境中使用,而该篇 ...

  9. apollo 配置中心_.NET Core 下使用 Apollo 配置中心

    " Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置 ...

最新文章

  1. 中国人长期“霸榜”GitHub,国外开发者发文控诉
  2. php 昨天开始时间_php日期处理显示:昨天、今天、本周、上一月等时间结点数据...
  3. VScode编辑器设置中文的教程,超详细的
  4. 谈谈如何利用 valgrind 排查内存错误
  5. 如何创建依赖于某时间段的ABAP视图
  6. 统计字符串每个字符出现的次数
  7. mysql 添加唯一索引_浅谈Mysql索引
  8. ubuntu16.04下安装NS-2.35以及对simple例的理解
  9. c语言程序设计平时作业代刷,C语言程序设计——小学生口算刷题系统
  10. Simulink之三相桥式全控整流电路
  11. 右侧快速入口滑动时左侧跟着变化
  12. HTML5 footer元素
  13. C语言-01基础语法
  14. 全球首发!惯性导航导论(剑桥大学)第四部分
  15. 由于应用程序配置不正确,未能启动此应用程序
  16. linux系统开机自动锁定键盘,设置linux开机启动小键盘的详细教程设置linux开机启动小键盘的图文教程...
  17. Java实现pdf文件转图片
  18. uni-app云开发的网盘助手微信小程序源码
  19. 奥维没有了gg地图后,正确的打开方式
  20. echarts全国地图china.js

热门文章

  1. 转载:xml文件中的特殊字符
  2. mybatis 大于_酸爽!IDEA 中这么玩 MyBatis,让编码速度飞起!
  3. python input 文件名_Python播放音频与录音
  4. Generative Adversarial Learning Towards Fast Weakly Supervised Detection(CVPR2018)阅读笔记
  5. Linux中一些常用的很巧妙的命令
  6. AdBlock屏蔽网易的“我来挑错”和“转发至微博”
  7. javac手动编译servlet
  8. 遭遇“烧钱瓶颈” 优酷成本结构堪忧
  9. 从Boxee的Amie Street访问音乐
  10. Keras版Faster-RCNN代码学习(IOU,RPN)1