Webclient 在第一次请求时变慢
Webclient slow on the first request
我正在创建一个从网站获取信息的应用程序,这个网站 returns 一行包含数据的文本。
为此,我只使用 WebClient.DownloadString()
。这是代码:
{
WebClient Client = new WebClient();
Client.Proxy = null;
return Client.DownloadString(url);
}
问题是,在第一次请求时,此过程总是需要 ~21.000ms
,接下来的请求需要正常的时间。有类似的问题,人们似乎通过添加行 Client.Proxy = null;
解决了这个问题,但它没有解决我的问题。我的代理互联网设置被禁用,防火墙没有阻止任何东西(尝试禁用它)。
我也用google等不同的网站测试过(测试不是服务器的问题),结果都是一样的。我也尝试使用 WebBrowser
控件和 HttpWebRequest
,但结果也是一样的。
在常规浏览器(经过测试的 edge、firefox 和 chrome)上加载同一页面大约需要 200ms
并清除缓存。
使用 wireshark 我得到了这个,但我不知道如何解释它:
使用火狐浏览器:
TCP:
1. SYN (client-server)
2. SYN (client-server)
3. SYN ACK (server-client)
4. ACK (client-server)
5. SYN ACK (server-client)
6. ACK (client-server)
HTTP:
5. GET (client-server)
TCP:
7. ACK (server-client)
HTTP:
5. RESPONSE 200 OK (server-client) (The correct response is received)
TCP:
7. ACK (client server)
然后用我的程序:
我得到了完全相同的过程,但是第一个通过 TCP 发送的数据包使用 Ipv6 地址而不是 Ipv4,然后它等待 21 秒,然后是其余的数据包,实际的 HTTP GET-RESPONSE 时间应该很短是。
问题解决了一直都是Ipv6。我现在没有向 http://www.hostame.domian/file
发出请求,而是向 http://xxx.xxx.xxx.xxx/file
发出请求,因此它直接转到 Ipv4 地址。
有点短暂的问题,但希望对遇到同样问题的人有所帮助。
我正在创建一个从网站获取信息的应用程序,这个网站 returns 一行包含数据的文本。
为此,我只使用 WebClient.DownloadString()
。这是代码:
{
WebClient Client = new WebClient();
Client.Proxy = null;
return Client.DownloadString(url);
}
问题是,在第一次请求时,此过程总是需要 ~21.000ms
,接下来的请求需要正常的时间。有类似的问题,人们似乎通过添加行 Client.Proxy = null;
解决了这个问题,但它没有解决我的问题。我的代理互联网设置被禁用,防火墙没有阻止任何东西(尝试禁用它)。
我也用google等不同的网站测试过(测试不是服务器的问题),结果都是一样的。我也尝试使用 WebBrowser
控件和 HttpWebRequest
,但结果也是一样的。
在常规浏览器(经过测试的 edge、firefox 和 chrome)上加载同一页面大约需要 200ms
并清除缓存。
使用 wireshark 我得到了这个,但我不知道如何解释它:
使用火狐浏览器:
TCP:
1. SYN (client-server)
2. SYN (client-server)
3. SYN ACK (server-client)
4. ACK (client-server)
5. SYN ACK (server-client)
6. ACK (client-server)
HTTP:
5. GET (client-server)
TCP:
7. ACK (server-client)
HTTP:
5. RESPONSE 200 OK (server-client) (The correct response is received)
TCP:
7. ACK (client server)
然后用我的程序:
我得到了完全相同的过程,但是第一个通过 TCP 发送的数据包使用 Ipv6 地址而不是 Ipv4,然后它等待 21 秒,然后是其余的数据包,实际的 HTTP GET-RESPONSE 时间应该很短是。
问题解决了一直都是Ipv6。我现在没有向 http://www.hostame.domian/file
发出请求,而是向 http://xxx.xxx.xxx.xxx/file
发出请求,因此它直接转到 Ipv4 地址。
有点短暂的问题,但希望对遇到同样问题的人有所帮助。