Bla*_*erX 18 .net garbage-collection idisposable
我有一些代码,这个代码使用非常多:
using (HttpWebResponse r = _GetHttpWebResponse(uri, body, method, contentType, headers)) {
/* do something with the response */
/* call r.Close() explicitly? */
}
Run Code Online (Sandbox Code Playgroud)
代码今天工作正常,但与服务器的连接保持打开很长一段时间.(使用TCPView检查)
Close()显式调用方法有什么好处?是推荐,还是建议不要这样做,为什么?
Sea*_*ght 28
当Dispose()调用on WebResponse(HttpWebReponse基类)时,它会Close()为你调用它的方法.使用Reflector快速浏览确认了这一点.
编辑(回应评论):如果已经为你调用,为什么要明确地调用它?为清楚起见?我想如果人们理解这个using (X x = ...)陈述,他们就会理解它正在关闭底层连接.在这种情况下,通过明确地调用它你什么也得不到
Iga*_*nik 16
该using关键字是一个语法糖try/finally块,它环绕你的HttpWebResponse,因为它实现IDisposable.在finally子句中,它将调用将调用的Dispose()方法Close().这意味着您不必显式调用该Close()方法.
如果在使用完响应后,您在 using 中有重要的代码,那么确保调用 close 是可以的。但是,您可能需要考虑重构代码,以便不需要响应的代码不在 using 块内。
也就是说,关闭响应并不一定会关闭连接。HTTP/1.1 协议允许连接保持打开状态,以便更快地发出后续请求。
| 归档时间: |
|
| 查看次数: |
10266 次 |
| 最近记录: |