首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有显式response.close()的"using“块中,HttpResponse是否有效?

在没有显式response.close()的"using“块中,HttpResponse是否有效?
EN

Stack Overflow用户
提问于 2009-10-23 01:07:28
回答 1查看 676关注 0票数 0

我想弄清楚这一点:

方法1:

代码语言:javascript
复制
Dim request = CreateRequest(uri) //some uri
Dim response = DirectCast(request.GetResponse, HttpWebResponse)
response.Close()

方法2:

代码语言:javascript
复制
Dim request = Createrequest(uri)
Using response = DirectCast(request.GetResponse, HttpWebResponse)
End Using

当我在本地机器上使用Method-1和Method-2连接并从远程机器X获得响应时,它们都工作正常。

当我在远程机器Y上使用此代码从X获取响应时,只有方法-1有效,而对于方法-2,我得到了

代码语言:javascript
复制
System.Net.WebException: The operation has timed out

上面提到的方法之间有什么区别,可能出现的问题是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-23 01:45:45

Using只是转换成一个Try/Finally块,它在Finally块中调用.Dispose()。您可以使用Reflector来查找生成的代码。您还可以使用它来查看方法的功能。在这种情况下,HttpWebResponse上的Dispose()方法与Close()的功能不同,这意味着它实际上在语义上存在差异。

当对象超出作用域时,Using通常具有立即释放对象使用的资源的好处。这对于像GDI+或文件句柄这样的东西很有用,但在HttpWebResponse的情况下,它可能会有点不同。由于对这个特定对象的了解不够,我猜测Close()并不会真正释放任何资源,所以也没有必要使用Dispose()调用Close()。也许这种行为是有正当理由的。

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

https://stackoverflow.com/questions/1608627

复制
相关文章

相似问题

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