我想弄清楚这一点:
方法1:
Dim request = CreateRequest(uri) //some uri
Dim response = DirectCast(request.GetResponse, HttpWebResponse)
response.Close()方法2:
Dim request = Createrequest(uri)
Using response = DirectCast(request.GetResponse, HttpWebResponse)
End Using当我在本地机器上使用Method-1和Method-2连接并从远程机器X获得响应时,它们都工作正常。
当我在远程机器Y上使用此代码从X获取响应时,只有方法-1有效,而对于方法-2,我得到了
System.Net.WebException: The operation has timed out上面提到的方法之间有什么区别,可能出现的问题是什么?
发布于 2009-10-23 01:45:45
Using只是转换成一个Try/Finally块,它在Finally块中调用.Dispose()。您可以使用Reflector来查找生成的代码。您还可以使用它来查看方法的功能。在这种情况下,HttpWebResponse上的Dispose()方法与Close()的功能不同,这意味着它实际上在语义上存在差异。
当对象超出作用域时,Using通常具有立即释放对象使用的资源的好处。这对于像GDI+或文件句柄这样的东西很有用,但在HttpWebResponse的情况下,它可能会有点不同。由于对这个特定对象的了解不够,我猜测Close()并不会真正释放任何资源,所以也没有必要使用Dispose()调用Close()。也许这种行为是有正当理由的。
https://stackoverflow.com/questions/1608627
复制相似问题