如果仅为参数功能创建将何时处置对象?

时间:2012-11-12 06:43:29

标签: .net vb.net garbage-collection dispose idisposable

比较

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

1 个答案:

答案 0 :(得分:1)

  

在第二个例子中,Request.GetResponse()创建的WebResponse对象何时被处理?

没有。您没有明确地调用Dispose,并且它不是Using语句中的资源,因此它不会被处理掉。

最终会收集垃圾,但你不应该依赖它的时间 - 你应该直接处理它。特别是,对于WebResponse,有一个连接池,每个目标的最大数量 - 所以如果你尝试从同一个服务器获取多个页面而不处理响应,你可能会在等待的时候挂起早先的回应最终确定。