Pac*_*ier 6 .net vb.net system.net response stream
我想知道我最终会从这段代码中获得任何未封闭的流:
Public Function [Get](ByVal url As String) As String
Using reader = New System.IO.StreamReader(System.Net.WebRequest.Create(url).GetResponse.GetResponseStream)
Return reader.ReadToEnd
End Using
End Function
Run Code Online (Sandbox Code Playgroud)
那这个呢:
Public Function Get2(ByVal url As String) As String
Using stream = System.Net.WebRequest.Create(url).GetResponse.GetResponseStream
Using reader = New System.IO.StreamReader(stream)
Return reader.ReadToEnd
End Using
End Using
End Function
Run Code Online (Sandbox Code Playgroud)
基本上,我们需要关闭System.Net.WebRequest的ResponseStream?
你要么需要关闭响应流或者你需要关闭的响应.请注意,关闭StreamReader包装a Stream无论如何都会关闭流,因此第一个版本应该没问题.(请注意,我认为"使用Using语句进行处理"在语义上等于"在finally块中关闭" - 显式调用没有任何好处,Close而不仅仅是处理流或响应.)
我相信关闭流是足够好的 - 你也不需要关闭响应 - 事实上这就是MSDN所说的,但我个人为了清楚起见这样做了:
Public Function [Get](ByVal url As String) As String
Using response = WebRequest.Create(url).GetResponse
Using reader = New System.IO.StreamReader(response.GetResponseStream)
Return reader.ReadToEnd
End Using
End Using
End Function
Run Code Online (Sandbox Code Playgroud)
(有一个理论上的好处在这里,它会关闭响应,如果GetResponse成功返回,但无论是GetResponseStream或StreamReader构造函数抛出异常.我不认为有任何实际的影响.)
如果你没有关闭任何东西,你可能很容易在将来对同一主机的请求中遇到超时 - "开放"响应将基本上占用与该主机的连接,并且默认情况下每个主机有两个开放连接的限制.这是超时的一个非常常见的原因 - 有许多SO问题,由于没有关闭任何东西,人们正在获得超时.
| 归档时间: |
|
| 查看次数: |
9220 次 |
| 最近记录: |