为什么第一个 HttpClient.PostAsync 调用在我的 C# winforms 应用程序中非常慢?
Why is first HttpClient.PostAsync call extremely slow in my C# winforms app?
我有一个这样的 httpclient:
var client = new HttpClient();
我post是这样的:
var result = client.PostAsync(
endpointUri,
requestContent);
并得到这样的响应:
HttpResponseMessage response = result.Result;
我知道这个调用会阻塞线程,这就是它应该如何工作的(只是为我自己构建一个工具,不需要异步线程)
我第一次运行这个电话,大约需要2分钟才能得到结果。同时,如果我在其他地方进行完全相同的调用,它会在 200 毫秒内完成。即使我打google,也需要2分钟。但是,在第一次通话后,只要我让应用程序保持打开状态,任何其他通话都没有问题。当我打开应用程序时,它只是第一次校准。可能是什么原因造成的?
问题是它挂了很长时间试图为客户端解析代理。像这样初始化 HttpClient 就成功了:
var client = new HttpClient(new HttpClientHandler
{
UseProxy = false
});
在我的例子中,我试图访问 localhost
上的服务。显然,HTTP 客户端在连接到其等效的 IPv4 之前首先尝试连接到 IPv6 本地主机(来源:https://github.com/jchristn/restwrapper),这会导致速度下降。
在我的例子中将 localhost
更改为 127.0.0.1
切断了 2000 毫秒的延迟,尽管第一个请求可能仍有约 120 毫秒的延迟。
我有一个这样的 httpclient:
var client = new HttpClient();
我post是这样的:
var result = client.PostAsync(
endpointUri,
requestContent);
并得到这样的响应:
HttpResponseMessage response = result.Result;
我知道这个调用会阻塞线程,这就是它应该如何工作的(只是为我自己构建一个工具,不需要异步线程)
我第一次运行这个电话,大约需要2分钟才能得到结果。同时,如果我在其他地方进行完全相同的调用,它会在 200 毫秒内完成。即使我打google,也需要2分钟。但是,在第一次通话后,只要我让应用程序保持打开状态,任何其他通话都没有问题。当我打开应用程序时,它只是第一次校准。可能是什么原因造成的?
问题是它挂了很长时间试图为客户端解析代理。像这样初始化 HttpClient 就成功了:
var client = new HttpClient(new HttpClientHandler
{
UseProxy = false
});
在我的例子中,我试图访问 localhost
上的服务。显然,HTTP 客户端在连接到其等效的 IPv4 之前首先尝试连接到 IPv6 本地主机(来源:https://github.com/jchristn/restwrapper),这会导致速度下降。
在我的例子中将 localhost
更改为 127.0.0.1
切断了 2000 毫秒的延迟,尽管第一个请求可能仍有约 120 毫秒的延迟。