首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我应该在HttpWebResponse上调用Close吗,即使它在using语句中?

我应该在HttpWebResponse上调用Close吗,即使它在using语句中?
EN

Stack Overflow用户
提问于 2009-02-02 22:28:50
回答 4查看 11.7K关注 0票数 18

我有一些代码,例如,这些代码在中的使用率非常高:

代码语言:javascript
复制
using (HttpWebResponse r = _GetHttpWebResponse(uri, body, method, contentType, headers)) {
    /* do something with the response */

    /* call r.Close() explicitly? */
}

代码现在运行得很好,但是到服务器的连接在相当长的一段时间内都是开放的。(使用TCPView检查)

显式调用Close()方法是否有好处?是推荐的,还是不推荐的,为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-02 22:33:48

如果在使用完响应之后,在sure中有重要的代码,那么调用close是可以的。但是,您可能希望考虑重构代码,以便不需要响应的代码不在using块中。

也就是说,关闭响应并不一定会关闭连接。HTTP/1.1协议使连接保持打开状态,以使后续请求更快。

票数 0
EN

Stack Overflow用户

发布于 2009-02-02 22:32:21

当在WebResponse (HttpWebReponse的基类)上调用Dispose()时,它会为您调用它的Close()方法。使用Reflector快速浏览一下就会确认这一点。

Edit (响应注释):如果已经为您调用了它,为什么还要显式地调用它?为了清楚起见?我认为如果人们理解了using (X x = ...)语句,他们就会明白它是在关闭底层连接。在这种情况下,显式调用它什么也得不到。

票数 30
EN

Stack Overflow用户

发布于 2009-02-02 22:33:31

using关键字是try/finally块的语法糖,它封装了HttpWebResponse,因为它实现了IDisposable。当在finally子句中时,它将调用Dispose()方法,该方法将调用Close()。这意味着您不必显式调用Close()方法。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/505231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档