HttpClient.GetAsync()CPU消耗很高

时间:2015-03-16 16:15:48

标签: c# performance-testing dotnet-httpclient

我有一个使用HttpClient类从其他服务获取一些资源的服务。作为性能测试的一部分,我们模拟了HttpClient.GetAsync()调用,以便从外部服务中删除依赖项,并将其替换为从本地磁盘返回内容的方法。令人惊讶的是CPU利用率从65%上升到22%。因此,当性能测试在没有模拟的情况下完成时,CPU利用率为65%,并且通过模拟它降低到22%。 但RPS保持不变

此外,当我开始增加负载时,CPU利用率和RPS上升,我认为这是预期的。

我的问题是 - 是HttpClient.GetAsync()这么昂贵的操作吗?如果是,那么我如何通过性能分析来确认?哪个工具可以帮助我。

注意:性能测试使用Visual Studio负载测试框架以每秒100个用户负载运行。

谢谢, 贾韦德

1 个答案:

答案 0 :(得分:0)

我通常构造我的请求并使用HttpClient.SendAsync(request),很少注意到CPU利用率的任何高峰。此外,每秒100个请求是大量的请求。考虑重新设计您的架构,以便它在重负载下表现更好。减少拨打HttpClient.SendAsyncHttpClient.GetAsync的次数等事项可以提高您的效果。您还可以考虑在服务器阵列之间进行负载平衡,以减少响应时间和CPU负载。另一个考虑因素是缓存对与您交互的外部服务的响应,以减少外部HTTP调用。然后,您可以依赖缓存的响应,直到需要刷新缓存。