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は明らかに2番目のEnd Usingステートメントで破棄されます。

2番目の例では、WebResponseによって作成されたオブジェクトはいつ破棄されRequest.GetResponse()ますか?

WebResponseが適切に廃棄されるように、2番目の例を次のように書き直す必要がありますか?

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

1 に答える 1

1

2番目の例では、Request.GetResponse()によって作成されたWebResponseオブジェクトはいつ破棄されますか?

Disposeいいえ。明示的に呼び出しているわけではなく、Usingステートメント内のリソースでもないため、破棄されません。

最終的にはガベージコレクションが行われますが、そのタイミングに依存するのではなく、直接廃棄する必要があります。特に、を使用するとWebResponse、ターゲットごとに最大数の接続のプールがあります。したがって、応答を破棄せずに同じサーバーから複数のページをフェッチしようとすると、前の応答が完了するのを待つ間にハングする可能性があります。 。

于 2012-11-12T06:55:05.993 に答える