Dot-Net
我是否應該在 HttpWebResponse 上呼叫 Close,即使它在 using 語句中?
我有一些類似的程式碼,這段程式碼被大量使用:
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 = ...)聲明,他們就會明白它正在關閉底層連接。在這種情況下,通過顯式呼叫它你什麼也得不到。