我有一些代码,例如,这些代码在中的使用率非常高:
using (HttpWebResponse r = _GetHttpWebResponse(uri, body, method, contentType, headers)) {
/* do something with the response */
/* call r.Close() explicitly? */
}
代码现在运行得很好,但是到服务器的连接在相当长的一段时间内都是开放的。(使用TCPView检查)
显式调用Close()
方法是否有好处?是推荐的,还是不推荐的,为什么?
发布于 2009-02-02 22:33:48
如果在使用完响应之后,在sure中有重要的代码,那么调用close是可以的。但是,您可能希望考虑重构代码,以便不需要响应的代码不在using块中。
也就是说,关闭响应并不一定会关闭连接。HTTP/1.1协议使连接保持打开状态,以使后续请求更快。
发布于 2009-02-02 22:32:21
当在WebResponse
(HttpWebReponse
的基类)上调用Dispose()
时,它会为您调用它的Close()
方法。使用Reflector快速浏览一下就会确认这一点。
Edit (响应注释):如果已经为您调用了它,为什么还要显式地调用它?为了清楚起见?我认为如果人们理解了using (X x = ...)
语句,他们就会明白它是在关闭底层连接。在这种情况下,显式调用它什么也得不到。
发布于 2009-02-02 22:33:31
using
关键字是try/finally
块的语法糖,它封装了HttpWebResponse
,因为它实现了IDisposable
。当在finally
子句中时,它将调用Dispose()
方法,该方法将调用Close()
。这意味着您不必显式调用Close()
方法。
https://stackoverflow.com/questions/505231
复制相似问题