关于HttpClient造成的内存泄露问题

目录

介绍

HttpClient 的用法


介绍

最近看到一篇关于内存的泄露原因查找的文章,最后发现是因为HttpClient的使用不当造成的。这里做一些简单的记录,以防止以后遇到相同的问题不知道怎么处理。原文中是将HttpClient的实例作为局部变量,在使用的时候进行创建,因为业务原因——需要高并发的处理相关问题,所以导致HttpClient的实例不断的被创建,最终导致内存泄漏。

HttpClient 的用法

以下是微软建议:
HttpClient可以复用,但在高吞吐的应用中,也应该复用,否则可能造成Socket资源紧张,因为Socket关闭后,根据TCP协议的安全指引,要‘冷处理’一会后,才能被重新使用,Windows下可以是2分钟/4分钟。

这是个使用建议:

HttpClient仅可在应用程序的整个生命周期中实例化一次并重复使用。以下情况可能会导致SocketException错误:

  • 为每个请求创建一个新的HttpClient实例。

  • 负载较重的服务器。

  • 为每个请求创建新的HttpClient实例可能会耗尽可用的套接字。

那么,既然找到了原因,更改就比较简单了,把在函数内的HttpClient实例拿到类里,变成静态成员即可。

如下:

private static HttpClient httpClient = new HttpClient();

是的,这样就可以了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值