出处:http://www.cnblogs.com/lori/p/7692152.html

回到目录

最近在进行开发过程中,基于都是接口开发,A站接口访问B接口接口来请求数据,而在这个过程中我们使用的是HttpClient这个框架,当然也是微软自己的框架,性能当前没有问题,但如果你直接使用官方的写法,在高并发时候,会有很大的性能隐患,因为它官方使用的是using的方式,而对于请求量比较大时,这种方法对TCP建立也会过高,即使用完马上释放也会有很多time_out的请求,所有决定把某个用到httpclient的组件做成静态化的!

明细

统计

调用,中规中矩的写法

                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;}

优化它,做成TCP长链接,所以请求走一个通道

        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");}

keep-alive关键字可以理解为一个长链接,超时时间也可以在上面进行设置,例如10秒的超时时间,当然并发量太大,这个10秒应该会抛弃很多请求

发送请求的代码没有了using,即这个httpclient不会被手动dispose,而是由系统控制它,当然你的程序重启时,这也就被回收了。

               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();

通过上面的改造,我们我系统性能得到了改善,TCP的连接数也降下来了

所以对于长链接的多路复用技术,相对于请求过多的情况还是最省资源的!

回到目录

转载于:https://www.cnblogs.com/smileberry/p/7697857.html

WebApi系列~HttpClient的性能隐患(转)相关推荐

  1. HttpClient的性能隐患

    最近在进行开发过程中,基于都是接口开发,A站接口访问B接口接口来请求数据,而在这个过程中我们使用的是HttpClient这个框架,当然也是微软自己的框架,性能当前没有问题,但如果你直接使用官方的写法, ...

  2. 如何开启jvm日志_直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解...

    JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势.及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM ...

  3. 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(三) Linux 软中断

    [Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(三) Linux 软中断 [1]相关概念 [1.1]中断 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力:为了减少 ...

  4. Fast load times系列翻译——将性能预算合并到构建过程中

    Fast load times系列翻译--将性能预算合并到构建过程中 在你定义了性能预算之后,就应该开始在程序中实施并追踪它了.有许多工具可以帮助你设置性能预算,并且在程序超出预算时发出警告.我们现在 ...

  5. 狂飙胶皮ajax字母是什么意思,狂飙系列套胶的性能解读

    注册乒乓网,名师1对1指导! 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 狂飙系列套胶的性能解读 简介:为了适应无机大球时代而推出的新一代高粘性速度型套胶,韧性和弹性平衡的胶皮配方,中小力 ...

  6. 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(一) 平均负载、上下文切换、CPU 使用率

    [Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(一) 平均负载.上下文切换.CPU 使用率 [1]相关概念 [1.1]平均负载 平均负载是指单位时间内,系统处于可运行状态和不可 ...

  7. WebApi系列~通过HttpClient来调用Web Api接口

    HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基 ...

  8. WebApi系列(从.Net 到 .Net Core)【更新】

    一. 简介  1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...

  9. WebApi系列(从.Net FrameWork 到 .Net Core)

    一. 简介  1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...

最新文章

  1. 从assemblyer Instructure deepth understander C principle
  2. JavaUtil_00_资源帖
  3. java-网络编程篇
  4. 五分钟学会企业的OpenStack(T版)——简介及安装方式
  5. oracle 实现 drop table if exists
  6. leetcode98 验证二叉搜索树
  7. 知识付费阅读小程序源码,前端+后台+代理+分销
  8. 14.图像透视——介绍,坐标系统(Coordinate System),建模投影(Modelling Projection)_1
  9. RLock(递归锁)
  10. Windows Phone开发(1):概论
  11. (C# TCP异步)客户端异常断开,服务器利用KeepAlive监测
  12. SPSS数据插补方法
  13. 你还不明白如何解决分布式Session?看这篇就够了!
  14. 软考 - 系统架构设计师(软件架构设计)
  15. Armv8架构虚拟化
  16. ACM计算机系统人为因素会议,虚拟现实打字照亮思想和键盘
  17. 自然数分解:任何一个自然数m的立方均可写成m个连续奇数之和。编程实现:输入一自然数 n,求组成 n3的 n个连续奇数。
  18. Linux 文件管理-基础知识-文件隐藏属性-【chattr】-排查系统异常命令
  19. Windows 10配置阿里云DNS
  20. 浏览器缓存Cache

热门文章

  1. 【java笔记】map集合
  2. AS打开卡住、一直加载的问题
  3. H.264 视频质量评价方法 (基于视频内容)
  4. bootsect.exe linux,bootsect.exe
  5. mysql tcp优化_mysql 优化
  6. logback为日志配置颜色
  7. mysql5.5备份数据库_mysql5.5数据库备份
  8. 从零开始的网站搭建,服务器与域名管理
  9. 【PAT乙】1065 单身狗 (25分)
  10. JavaScript入门→HTML引用JS、变量、表达式操作符、数组Array数组对象、选择结构循环结构、函数、JavaScript与JAVA区别