Yuan天空
Yuan天空
  • 我的主页
  • 博客随笔
  • 软件作品
    • TK精灵(进程守护)
    • 远程运维助手
    • DicomStoreSCU
    • TKOCR(离线OCR)
    • 更多...
  • 学习资源
  • 网址收藏
  • HTML模板
一个不专业的.NET开发者博客
  1. 主页
  2. 博客
  3. 发布页

c#HttpClient频繁实例化请求接口出现内存泄露的解决办法

HttpClient内存泄露内存溢出解决办法
编程开发 2023-03-22 141

表现:软件内存随着时间慢慢增长无法释放

最近在再给自家程序进行了一次比较大的升级优化,运行效果也感觉挺不错的的于是前两天就给自家用户给升级上了。 但昨天无意间发现,软件占用的内存变得有些偏高了,按以往的情况来看软件正常运行期间的内存始终是保存在70到100MB以内的,但昨天却却已经占用到150M看着还隐约慢慢上涨的趋势,本次升级并没有添加什么比较占内存的功能,坑定不正常于是将程序重启,果然刚起来时内存只有70MB左右,但随着时间慢慢往上涨(每次的涨幅很小),今天再过来看果然内存已经上涨到180MB,这个问题折腾了一天。

c#HttpClient频繁实例化请求接口出现内存泄露的解决办法

原因:HttpClient的频繁实例化 每次都会有少许内存泄露

新升级的功能里新增了一个在线订阅功能 用到了HttpClient定时去服务器请求接口验证当前token,每次我都实例化了一个HttpClient并且使用了using进行回收 但就是回收不干净每次都会泄露一点点内存,短期问题不大,时间久了坑定会导致电脑内存不够用而崩溃,不知道为啥会这样。只是很奇怪的是,测试了好几台服务器 只有一台配置比较高的服务器会这样,其他的内存占用很低

有问题的写法

using (HttpClient http = new HttpClient()) 
{
     using (HttpResponseMessage response = http.GetAsync("https://www.baidu.com").Result) //向服务端发送请求
	 {
     Console.WriteLine($"HttpClient 状态码:{response.StatusCode}");
     string result = response.Content.ReadAsStringAsync().Result;//读取响应内容
     }
}

办法:HttpClient 设置成静态变量 不要每次都重新实例化

static HttpClient http => new HttpClient();

using (HttpResponseMessage response = http.GetAsync("https://www.baidu.com").Result) //向服务端发送请求
{
     Console.WriteLine($"HttpClient 状态码:{response.StatusCode}");
     string result = response.Content.ReadAsStringAsync().Result;//读取响应内容
}

相关文章推荐
01. FastReport .NET 导出jpg图像打印模糊的解决办法
02. HttpClient请求域名报错 The SSL connection could not be established, see inner exception.
03. winform flowlayoutpanel 性能优化 以及 闪烁问题的解决办法
问题反馈/学习建议
1. 文明上网,理性表达,营造舒适的学习氛围
2. 请不要反馈提交与本页主题无关内容