2

相比:

Using Response As WebResponse = Request.GetResponse
    Using reader As StreamReader = New StreamReader(Response.GetResponseStream)
        strWebResponse = reader.ReadToEnd
    End Using
End Using

和:

Dim xmldoc As XmlDocument = new XmlDocument
xmldoc.Load(Request.GetResponse().GetResponseStream)

在第一个例子中,Response显然是设置在第二个End Using语句处。

在第二个例子中,WebResponse创建的对象什么时候Request.GetResponse()被释放?

是否应该将第二个示例重写如下以确保WebResponse正确处理?

Dim xmldoc As XmlDocument = new XmlDocument
Using Response As WebResponse = Request.GetResponse
    xmldoc.Load(Response.GetResponseStream)
End Using
4

1 回答 1

1

在第二个例子中,Request.GetResponse() 创建的 WebResponse 对象什么时候被释放?

不,您没有Dispose显式调用,并且它不是Using语句中的资源,因此不会被处置。

它最终会被垃圾收集,但你不应该依赖它的时间 - 你应该直接处理它。特别是,WebResponse有一个连接池,每个目标的最大数量 - 因此,如果您尝试从同一服务器获取多个页面而不处理响应,您可能会在等待较早的响应完成时挂起.

于 2012-11-12T06:55:05.993 回答