2013-10-12 41 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