当我第一次在Winform应用程序中创建HttpWebRequest时,处理第一个请求需要10~30秒。后续调用不到一秒钟。我写了一个小POC应用程序来举例说明这个,它由两个按钮和2个文本框组成,可以在这里找到应用程序的图像(我无法在这里上传图像......):
应用代码非常简单:
public partial class Form1 : Form
{
DateTime _start;
TimeSpan _span;
int _count = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
_count++;
_start = DateTime.Now;
HttpWebRequest _request = (HttpWebRequest)WebRequest.Create(textBox1.Text); ;
// Added after Conrad's response:
_request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
HttpWebResponse _response = (HttpWebResponse)_request.GetResponse();
_response.Close();
_span = DateTime.Now - _start;
textBox2.Text += _count.ToString("000") + ": " + _span.ToString(@"mm\:ss\,fff") + "\r\n";
}
private void button2_Click(object sender, EventArgs e)
{
textBox2.Text = "";
}
}
为什么第一次请求需要这么长时间?我可以做些什么来加快这个速度?
答案 0 :(得分:5)
如果将proxy属性设置为null,它也可以工作,即使不禁用逻辑卡也是如此。
答案 1 :(得分:2)
神秘解决了,谢谢所有人的帮助。使用Fiddler2(非常感谢,Bradley& Jason!),我能够确定问题出在我的笔记本上。我有一个MS-Loopback&一个VirtualBox适配器,用于PDA和PDA的测试。 VM的。当启用其中一个或两个时,应用程序花了太长时间来确定连接的网关。当我禁用两张逻辑卡时,滞后就消失了。
我仍然认为WinForm app / .Net有些奇怪,因为我的浏览器(IE / FF)没有遇到这个问题。也许有一种方法可以调整.NET或我的应用程序来忽略这个适配器,但由于我是一个几乎完全的webnorant(网络无知),我很高兴找到这个解决方案。
答案 2 :(得分:1)
嗯,有几个不同的第一,但基本上有一些设置为你的第一次打击做。你可以在边缘旋转,但你从努力中得到的价值是可疑的。它肯定不会是29秒......
"快速"方法就是在另一个线程中尽可能地抛弃请求,尽可能接近应用程序的第一件事。
答案 3 :(得分:0)
这听起来像是您的网络服务上的IIS设置。请尝试auto-start以减少首次请求延迟。