比较
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
答案 0 :(得分:1)
在第二个例子中,Request.GetResponse()创建的WebResponse对象何时被处理?
没有。您没有明确地调用Dispose
,并且它不是Using
语句中的资源,因此它不会被处理掉。
最终会收集垃圾,但你不应该依赖它的时间 - 你应该直接处理它。特别是,对于WebResponse
,有一个连接池,每个目标的最大数量 - 所以如果你尝试从同一个服务器获取多个页面而不处理响应,你可能会在等待的时候挂起早先的回应最终确定。