2011-11-28 266 views
3

當我第一次在Winform應用程序中創建一個HttpWebRequest時,需要10〜30秒來處理第一個請求。隨後的通話時間不到一秒鐘。我寫了一個小程序POC舉例說明本,它由兩個按鈕和文本框2,應用程序的圖像可以在這裏找到(我不能在這裏上傳圖片尚未...):Winform應用程序的第一個Web請求很慢

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

爲什麼花這麼長時間第一次請求?我能做些什麼來加快速度?

+0

你對公共部位或某種形式的本地資源的測試?速度與在瀏覽器中加載相比如何?你確定點擊不是因爲遠程服務器不得不旋轉一些空閒的資源嗎? – Jason

+0

Jason,我正在使用的URL是public(http://www.maxprocess.com.br/status.htm),它是我們公司網站上的一個快速和骯髒的html頁面,只有33個字節(好吧)。當我通過瀏覽器(IE或FF)訪問此頁面時,它會按預期方式立即加載。滯後只在我的WinForm應用程序中。 – tcbrazil

+0

我建議通過探查器運行它,看看你是否能夠深入瞭解所有情況。 – Jason

回答

1

那麼有幾個不同的第一,但基本上有一個公平的位設置爲你的第一次打。你可以在邊緣徘徊,但你從努力中獲得的價值是可疑的。這當然不會是29秒... ...

「快速」的方法就是在另一個線程中做一個扔掉請求,儘可能接近你的應用程序做的第一件事。

+0

Tony,這是一個合理的解決方法,但我想知道爲什麼一個WinForm應用程序有這種行爲,因爲在我使用的瀏覽器(IE/FF)中,URL被瞬間加載。 – tcbrazil

0

這聽起來像您的網絡服務上的IIS設置。嘗試auto-start以減少第一個請求延遲。

2

神祕解決,感謝所有人的insigths。使用Fiddler2(非常感謝,Bradley & Jason!),我能夠確定問題出現在我的筆記本上。我有一個MS-Loopback &一個VirtualBox適配器,我用它來測試PDA的&虛擬機。當其中一個或兩個都啓用時,應用程序花費很長時間來確定連接的網關。當我禁用這兩個邏輯卡時,延遲消失了。

我仍然認爲在WinForm應用/ .Net中存在一些奇怪的現象,因爲我的瀏覽器(IE/FF)不會遇到這個問題。也許有一種方法可以調整.NET或我的應用程序來忽略這些適配器,但由於我是一個幾乎完全的webnorant(Web無知),我很高興找到此解決方案。

+0

不要忘記標記爲答案! :) –