1

我使用Visual Studios负载测试项目进行负载/压力测试,当前用户设置为10时很低。应用程序向WebAPI服务层/应用程序发出多个System.Net.Http.HttpClient请求(在某些情况下,它会调用另一个WebApi层/应用程序),并且在测试单个MVC4控制器(不解析依赖请求)时,它只能获得大约30个请求/秒。Asp.Net HttpClient性能

这些数字基于一个示例项目,其中没有真正的代码在除HttpClient调用之外的任何层执行并构建要返回的模型的新集合(所以一些序列化也发生为WebApi的一部分)。我已经尝试了异步控制器和没有,结果似乎非常相似(异步控制器略有改善)

虽然数据的性质和交通手段显然缓存调用显着增加(大约400 RPS)相当数量的呼叫不会被缓存在真实世界的场景中。

HttpClient(或一般的HTTP层)太贵了,还是有一些想法可以获得更高的吞吐量?

可能值得注意的是,在我的本地开发机器上,这个负载测试也使CPU最大化。任何想法或建议将非常感激?

+0

这真的很难提供建设性的反馈意见时,有涉及到这么多的变量,可以更改默认的连接限制。你的服务是否在同一台机器上运行,不同的机器上,有多少网络跳转,你是否穿越域名等?由于您正在讨论调用可调用其他Web API服务的Web API服务,因此您的请求中可能会有很多延迟。 –

+0

我见过HttpClient在开发机器上对本地web api执行12000 reqs/sec。但是有很多因素需要考虑。 HttpClient不应该增加很多开销。 –

+0

示例应用程序包含一个应用程序中的所有层,所有这些层都在我的开发机器上本地运行。 它很有希望听到你已经看到12000 HttpClient请求/秒。 – Timmo

回答

1

HttpClient具有2个并发连接的内置默认值。

您是否更改了默认值?

this answer

如果你追逐了HTTPClient的DEPS我相信,你会发现,它依赖于对ServicePointManager的设置。

this link

你可以通过调用System.Net.ServicePointManager.DefaultConnectionLimit

+0

在某些情况下,您必须显式设置DefaultConnectionLimit以使其对HttpClient有影响。我的经验一直存在,除非你设置它,你会看到无限数量的连接,这实际上会让你的表现更糟糕。 –

+0

你可以定义这些场景吗?我一直都看到2连接默认强制执行... – CtrlDot

+0

尝试从控制台应用程序使用httpclient。 –