2013-10-12 43 views
0

所以我正在製作一個程序,它使得大量的HttpWebRequests成爲可能。在這個程序中,速度是主要的。如果我能找到方法來將HttpWebRequests增加一毫秒,那很好。關閉WebResponse或離開?

好吧,所以我的問題是這樣的:我有一個方法,使一個HttpWebRequest(GET請求)到一個網站,另一個方法,使一個POST HttpWebRequest的SAME主機(略有不同的URL,但相同的主機),哪在每隔一段時間後被稱爲第一種方法。

在我的第一個方法(GET請求,讓我們說方法A)中,我在閱讀響應主體後關閉WebResponse。將此WebResponse保持打開狀態,然後調用POST方法(比方說方法B)更快些,還是現在應該怎麼做,關閉方法A的WebResponse?

示例代碼:

public string MethodA() 
{ 
    // Make a HttpWebRequest to a URL like: xxxx.yyyy.com 
    WebResponse response = request.GetResponse(); 
    string x = ReadResponseBody(response); 
    response.Close(); 
    if(x.Contains("something")) 
     MethodB(); 
} 

public void MethodB() 
{ 
    // Make a POST HttpWebRequest to a URL like: xxxx.zzzz.com (same host). 
    WebResponse response = request.GetResponse(); 
    response.Close(); 
} 

所以,我要離開我的代碼,因爲它是從關閉了methodA()第一WebResponse的,然後調用方法b(),或其他什麼東西?

另外,有人可以提供一些關於如何提高速度的技巧,因爲它是我的程序中最重要的東西,我需要它儘可能快。

+0

請每個問題只問一個問題。 –

回答

6

你應該絕對關閉WebResponse - 理想與using聲明:

using (WebResponse response = request.GetResponse()) 
{ 
    string x = ReadResponseBody(response); 
} 

如果關閉響應,框架不知道你用它做,並且不會重複使用連接。如果您做了關閉響應,連接將返回到該主機的池,並且可以重新使用。

由於有每個主機(可配置)的連接限制,沒有閉合的反應可以用超時或死鎖結束了,因爲你的進程等待網頁響應是敲定代替(然後會像閉幕)。你真的不想等垃圾收集器發生注意到你已經完成的迴應:)

+0

非常感謝,非常好的答案。 :) – user2764359