【发布时间】:2020-07-13 04:01:51
【问题描述】:
我有一个 .Net Core 3.1 应用程序。在应用程序中,我使用 IHttpClientFactory 创建一个 HttpClient。当我使用 SendAsync 拨打电话时,第一个请求需要 2 秒以上,而后续请求需要不到 100 毫秒。这对于生产应用程序来说是不可接受的性能。
我还注意到,如果我有一段时间没有提出任何请求,就会发生这种情况。我遇到了 PooledConnectionIdleTimeout 属性,它默认为 2 分钟,我可以延长该时间,但这仅适用于已经存在的池连接,而不是在需要创建新连接时。 我在我的 Startup.cs 中配置了 HttpClient:
services.AddHttpClient("HttpClient",
h =>
{
h.BaseAddress = new Uri(Configuration["PythonUrl"]);
});
像这样使用 HttpClient:
var client = httpClientFactory.CreateClient("HttpClient");
var res = await client.GetAsync(nameof(Accounts).ToLower() + "/" + id.ToString() + "/");
当 "Configuration["PythonUrl"]" 包含 PC 名称时,像这样:
{
"AllowedHosts": "*",
"PythonUrl": "http://PC202003261059:8000/",
"url": "http://*:5000"
}
HttpClient 的第一个请求变得很慢。有什么办法可以避免这种情况吗?
【问题讨论】:
-
这貌似和HttpClient或者ClientFactory没什么关系,更有可能是webserver转起来或者dns解析或者其他什么问题,总之HttpClient里面没有开关说,GoFasterOnFirstLoad = true跨度>
-
@TheGeneral 我不这么认为,我认为可能是由于httpclient的DNS解析
-
HttpClient 客户端 = new HttpClient(); var res = await client.GetAsync("PC202003261059:8000/accounts/2/"); 这样也会慢
-
第一次请求由于延迟初始化而变慢的情况并不少见。您始终可以在启动时执行一个虚拟请求,以便在处理实际流量之前预热您的服务。
-
@stackoverflow.com/users/6765564/kelvin 先谢谢了,经过我的测试,发现可能是DNS造成的,但是不知道为什么httpclient用DNS变慢了。
标签: c# performance asp.net-core httpclient