WebApi系列~HttpClient的性能隐患(转)
出处:http://www.cnblogs.com/lori/p/7692152.html
回到目录
最近在进行开发过程中,基于都是接口开发,A站接口访问B接口接口来请求数据,而在这个过程中我们使用的是HttpClient这个框架,当然也是微软自己的框架,性能当前没有问题,但如果你直接使用官方的写法,在高并发时候,会有很大的性能隐患,因为它官方使用的是using的方式,而对于请求量比较大时,这种方法对TCP建立也会过高,即使用完马上释放也会有很多time_out的请求,所有决定把某个用到httpclient的组件做成静态化的!
明细
统计
调用,中规中矩的写法
![](/assets/blank.gif)
using (var http = new HttpClient()){var json = JsonConvert.SerializeObject(new{target_index = projectName,timestamp = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),Level = level.ToString(),Message = message});json = json.Replace("target_index", "@target_index").Replace("timestamp", "@timestamp");var httpContent = new StringContent(json, Encoding.UTF8);httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");var result = http.PostAsync(apiLoggerUri, httpContent).Result;}
![](/assets/blank.gif)
优化它,做成TCP长链接,所以请求走一个通道
![](/assets/blank.gif)
private static readonly HttpClient _httpClient;private ApiLoggerOptions _config;static ApiLogger(){_httpClient = new HttpClient();_httpClient.Timeout = new TimeSpan(0, 0, 10);_httpClient.DefaultRequestHeaders.Connection.Add("keep-alive");}
![](/assets/blank.gif)
keep-alive关键字可以理解为一个长链接,超时时间也可以在上面进行设置,例如10秒的超时时间,当然并发量太大,这个10秒应该会抛弃很多请求
发送请求的代码没有了using,即这个httpclient不会被手动dispose,而是由系统控制它,当然你的程序重启时,这也就被回收了。
![](/assets/blank.gif)
var json = JsonConvert.SerializeObject(new{target_index = projectName,timestamp = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),Level = level.ToString(),Message = message});json = json.Replace("target_index", "@target_index").Replace("timestamp", "@timestamp");var httpContent = new StringContent(json, Encoding.UTF8);httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");_httpClient.PostAsync(apiLoggerUri, httpContent).Wait();
![](/assets/blank.gif)
通过上面的改造,我们我系统性能得到了改善,TCP的连接数也降下来了
所以对于长链接的多路复用技术,相对于请求过多的情况还是最省资源的!
回到目录
转载于:https://www.cnblogs.com/smileberry/p/7697857.html
WebApi系列~HttpClient的性能隐患(转)相关推荐
- HttpClient的性能隐患
最近在进行开发过程中,基于都是接口开发,A站接口访问B接口接口来请求数据,而在这个过程中我们使用的是HttpClient这个框架,当然也是微软自己的框架,性能当前没有问题,但如果你直接使用官方的写法, ...
- 如何开启jvm日志_直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解...
JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势.及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM ...
- 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(三) Linux 软中断
[Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(三) Linux 软中断 [1]相关概念 [1.1]中断 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力:为了减少 ...
- Fast load times系列翻译——将性能预算合并到构建过程中
Fast load times系列翻译--将性能预算合并到构建过程中 在你定义了性能预算之后,就应该开始在程序中实施并追踪它了.有许多工具可以帮助你设置性能预算,并且在程序超出预算时发出警告.我们现在 ...
- 狂飙胶皮ajax字母是什么意思,狂飙系列套胶的性能解读
注册乒乓网,名师1对1指导! 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 狂飙系列套胶的性能解读 简介:为了适应无机大球时代而推出的新一代高粘性速度型套胶,韧性和弹性平衡的胶皮配方,中小力 ...
- 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(一) 平均负载、上下文切换、CPU 使用率
[Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(一) 平均负载.上下文切换.CPU 使用率 [1]相关概念 [1.1]平均负载 平均负载是指单位时间内,系统处于可运行状态和不可 ...
- WebApi系列~通过HttpClient来调用Web Api接口
HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基 ...
- WebApi系列(从.Net 到 .Net Core)【更新】
一. 简介 1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...
- WebApi系列(从.Net FrameWork 到 .Net Core)
一. 简介 1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...
最新文章
- 从assemblyer Instructure deepth understander C principle
- JavaUtil_00_资源帖
- java-网络编程篇
- 五分钟学会企业的OpenStack(T版)——简介及安装方式
- oracle 实现 drop table if exists
- leetcode98 验证二叉搜索树
- 知识付费阅读小程序源码,前端+后台+代理+分销
- 14.图像透视——介绍,坐标系统(Coordinate System),建模投影(Modelling Projection)_1
- RLock(递归锁)
- Windows Phone开发(1):概论
- (C# TCP异步)客户端异常断开,服务器利用KeepAlive监测
- SPSS数据插补方法
- 你还不明白如何解决分布式Session?看这篇就够了!
- 软考 - 系统架构设计师(软件架构设计)
- Armv8架构虚拟化
- ACM计算机系统人为因素会议,虚拟现实打字照亮思想和键盘
- 自然数分解:任何一个自然数m的立方均可写成m个连续奇数之和。编程实现:输入一自然数 n,求组成 n3的 n个连续奇数。
- Linux 文件管理-基础知识-文件隐藏属性-【chattr】-排查系统异常命令
- Windows 10配置阿里云DNS
- 浏览器缓存Cache
热门文章
- 【java笔记】map集合
- AS打开卡住、一直加载的问题
- H.264 视频质量评价方法 (基于视频内容)
- bootsect.exe linux,bootsect.exe
- mysql tcp优化_mysql 优化
- logback为日志配置颜色
- mysql5.5备份数据库_mysql5.5数据库备份
- 从零开始的网站搭建,服务器与域名管理
- 【PAT乙】1065 单身狗 (25分)
- JavaScript入门→HTML引用JS、变量、表达式操作符、数组Array数组对象、选择结构循环结构、函数、JavaScript与JAVA区别