2012-07-26 45 views
0

我使用REST的服務,需要在以下方式Bacis驗證:使用REST的服務 - 第一次花費更長的時間如下要求

private void button1_Click(object sender, EventArgs e) { 
    try { 
     var url = "http://172.34.1.111:8088/ustrich/rest/projects/pid/1234"; 
     using (var wc = this.CreateWebClient(url)) { 
      var stopWatch = new Stopwatch(); 
      stopWatch.Start(); 
      var s = wc.DownloadString(url); 
      stopWatch.Stop(); 
      this.label1.Text = stopWatch.Elapsed.ToString(); 
      this.textBox1.Text = s; 
     } 
    } catch (Exception ex) { 
     this.textBox1.Text = ex.ToString(); 
    } 
} 

protected WebClient CreateWebClient(string url) { 
    var webClient = new WebClient(); 
    var cache = new CredentialCache { { new Uri(url), "Basic", new NetworkCredential("rest", "rest") } }; 
    webClient.Credentials = cache; 
    webClient.Headers.Add("Content-Type", "text/xml; charset=utf-8"); 
    webClient.Encoding = Encoding.UTF8; 
    return webClient; 
} 

問題是現在,當我開始我的試驗 - 應用程序並執行此代碼,這是wc.DownloadString(url)第一次需要大約5秒。接下來的電話,當我點擊按鈕上的第二個等時間時,它只需要300ms。 現在我的問題:我的代碼中有什麼問題嗎?我可以在那裏優化某些內容以解決首次通話需要5秒的問題嗎? 感謝您的幫助。

+0

這就是IIS的工作方式,新的內容必須在首次處理時處理。 – Alex 2012-07-26 08:03:46

+0

什麼類型的應用程序是測試應用程序? – 2012-07-26 08:13:53

+0

您的應用是以5秒爲準還是RESTful API以5秒爲首次打擊? – 2012-07-26 08:14:47

回答

0

第一次點擊代碼時,它會被預編譯。這次會一直很慢。我相信你可以在構建代碼時使用MSBUILD來做到這一點,但這只是將時間轉移到過程的不同部分。在生產中,這隻會在每次工作進程重新啓動時發生。

+0

嗨弗萊姆 - mmhh - 什麼將被預編譯後程序運行,它調用wc.DownloadString(url)? - 在這個時候,應用程序已經預編譯。 – BennoDual 2012-07-26 08:00:24

+0

@ t.kehl。你編譯你的代碼。它首次在IIS中被擊中,它是PRECOMPILED。請參閱[這裏](http://msdn.microsoft.com/en-us/library/bb398860.aspx)。 – 2012-07-26 08:02:17

+0

REST服務是在Apache中運行的PHP Restservice。它不會在我的測試之間停止並重新啓動。但總是在開始測試應用程序並首次啓動REST服務後,隨着時間的推移,它將花費更長的時間。 – BennoDual 2012-07-26 08:13:00

相關問題