Winform应用程序第一个Web请求很慢

时间:2011-11-28 17:48:49

标签: c# winforms performance httpwebrequest

当我第一次在Winform应用程序中创建HttpWebRequest时,处理第一个请求需要10~30秒。后续调用不到一秒钟。我写了一个小POC应用程序来举例说明这个,它由两个按钮和2个文本框组成,可以在这里找到应用程序的图像(我无法在这里上传图像......):

enter image description here

应用代码非常简单:

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 = "";
    }
}

为什么第一次请求需要这么长时间?我可以做些什么来加快这个速度?

4 个答案:

答案 0 :(得分:5)

如果将proxy属性设置为null,它也可以工作,即使不禁用逻辑卡也是如此。

来源:HttpWebRequest runs slowly first time within SQLCLR

答案 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以减少首次请求延迟。