出处: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. mui ios中form表单中点击输入框头部导航栏被推起及ios中form表单中同时存在日期选择及输入框时,日历选择页面错乱bug...
  2. sql三张表的搜索要满足5种搜索条件的模糊搜索_面试三轮我倒在了一道 SQL 题上……| 原力计划...
  3. [js高手之路]构造函数的基本特性与优缺点
  4. linux系统获取光盘信息api,在Visual C#中运用API函数获取系统信息
  5. 多版本号并发控制(MVCC)在实际项目中的应用
  6. mfc动态改变clip风格_echarts动态滑动平均滤波
  7. hihocoder第233周
  8. [转]微擎应用笔记3--manifest.xml文件使用说明
  9. 21、OSPF配置实验之特殊区域totally stub
  10. 万物皆可python_Python知识点合集,学完万物皆可爬
  11. 基于python的人脸识别开题报告怎么写_开题报告-人脸识别系统的研究与实现
  12. php pdo连接oracle乱码,PHP编程:php pdo oracle中文乱码的快速解决方法
  13. 计算机网络密码忘记了怎么办,忘记电脑密码怎么办?--重置电脑密码的方法详解...
  14. uni-app 杂记
  15. linux课程--实验二 Linux 基本命令操作2
  16. 入职体检(三甲医院)
  17. 5 win10 python3.6+pcl1.9环境配置
  18. Linux下一些网络小技巧
  19. JAVA实现删除文件夹和文件
  20. 数据分析[1.2]--《深入浅出数据分析》1-分解数据

热门文章

  1. 【java笔记】可变参数
  2. ffdshow 源代码分析1 : 整体结构
  3. php无极分类非递归_PHP中的无限级分类、无限嵌套评论
  4. flink sql设置并行度_Flink原理——任务调度原理
  5. java 管道流_Java IO7:管道流、对象流
  6. matlab矩阵元素绝对值,如何解决矩阵内部元素绝对值化
  7. SpringMVC→简介、MVC、SpringMVC工作原理、Maven搭建第一个SpringMVC、请求参数接收、重定向、文件上传、AJAX异步访问、请求参数接收绑定JSON、@注解及传参
  8. 字符串(如何输入一行带有空格的字符串)
  9. javascript中ajax的优缺点
  10. commons-fileupload的ServletFileUpload类