gpt4 book ai didi

.net - 我们需要关闭 System.Net.WebRequest 的 ResponseStream 吗?

转载 作者:行者123 更新时间:2023-12-04 14:18:03 26 4
gpt4 key购买 nike

我想知道我最终会从这段代码中获得任何未关闭的流:

   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

那这个呢:
  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

基本上,我们是否需要关闭 System.Net.WebRequestResponseStream ?

最佳答案

您要么需要关闭响应流,要么需要关闭响应。注意关闭 StreamReader包装 Stream无论如何都会关闭流,所以第一个版本应该没问题。 (请注意,我认为“使用 Using 语句进行处理”在语义上等同于“在 finally 块中关闭”——显式调用 Close 而不是仅仅处理流或响应没有任何好处。)

我相信关闭流已经足够好了 - 你不需要关闭响应 - 事实上 that's what MSDN states ,但为了清楚起见,我个人会这样做:

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

(这里有一个理论上的好处,如果 GetResponse 成功返回,它将关闭响应,但 GetResponseStreamStreamReader 构造函数抛出异常。我不希望这有任何实际意义。)

如果你不关闭任何东西,你很容易在 future 对同一主机的请求中遇到超时——“打开”响应基本上会占用与该主机的连接,默认情况下,每个主机有两个打开连接的限制。这是超时的一个非常常见的原因 - 有很多 SO 问题,人们由于没有关闭任何东西而导致超时。

关于.net - 我们需要关闭 System.Net.WebRequest 的 ResponseStream 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com