【发布时间】:2015-05-18 20:34:16
【问题描述】:
我有一个服务,它使用 HttpClient 类从其他服务中获取一些资源。作为我们性能测试的一部分,我们模拟了 HttpClient.GetAsync() 调用以从外部服务中删除依赖项,并将其替换为从本地磁盘返回内容的方法。令人惊讶的是 CPU 利用率从 65% 变为 22%。因此,在没有 mock 的情况下进行性能测试时,CPU 利用率为 65%,而有了 mock 则降至 22%。 但 RPS 保持不变
另外,当我开始增加负载时,CPU 利用率和 RPS 上升,我认为这是意料之中的。
我的问题是 - HttpClient.GetAsync() 是一个如此昂贵的操作吗?如果是,那么我如何通过性能分析来确认这一点?哪个工具可以帮助我。
注意:性能测试使用 Visual Studio 负载测试框架以每秒 100 个用户负载运行。
谢谢, 贾维德
【问题讨论】:
-
您是否真的使用了分析器来查看所花费的时间?
-
您可以为负载测试增加 HttpClient 的 DefaultConnectionLimit :ServicePointManager.DefaultConnectionLimit = 20;
-
另外,请务必尽可能使用 ConfigureAwait(false)
-
你的模拟类使用thread.sleep吗?
-
@Ewan,不,我在模拟类中使用 Task.Delay。
标签: c# performance-testing dotnet-httpclient