Dot-Net

我是否應該在 HttpWebResponse 上呼叫 Close,即使它在 using 語句中?

  • February 2, 2009

我有一些類似的程式碼,這段程式碼被大量使用:

using (HttpWebResponse r = _GetHttpWebResponse(uri, body, method, contentType, headers)) {
   /* do something with the response */

   /* call r.Close() explicitly? */
}

該程式碼今天執行良好,但與伺服器的連接保持打開了相當長的一段時間。(使用 TCPView 檢查)

顯式呼叫該Close()方法有好處嗎?是推薦還是不推薦,為什麼?

如果您在使用完響應後在 using 中有重要程式碼,那麼請確保呼叫 close 是可以的。但是,您可能需要考慮重構程式碼,以便不需要響應的程式碼不在 using 塊內。

也就是說,關閉響應並不一定會關閉連接。HTTP/1.1 協議規定連接保持打開狀態,以使後續請求更快。

在(的基類)Dispose()上呼叫時,它會為您呼叫它的方法。使用 Reflector 快速瀏覽一下就證實了這一點。WebResponse``HttpWebReponse``Close()

編輯(回應評論):如果已經為您呼叫它,為什麼要明確呼叫它?為清楚起見?我認為如果人們理解了這個using (X x = ...)聲明,他們就會明白它正在關閉底層連接。在這種情況下,通過顯式呼叫它你什麼也得不到。

引用自:https://stackoverflow.com/questions/505231