2013-07-04 53 views
4

在WinForms中,WebBrowser控件在HtmlDocument類型中有一個Document屬性。 HtmlDocument實例具有如FormsLinksGetElementsByTagName()等等的屬性/方法,其返回HtmlElementCollection實例。當我遍歷一個HtmlElementCollection時,我得到了HtmlElement實例。這些HtmlElement實例具有DomElement屬性,它是對基礎COM對象的引用。我的問題是,我應該在這些HtmlElement實例上調用Marshal.ReleaseComObject()方法還是WinForms在內部管理引用?我應該處置HtmlElement實例嗎?

+0

這不是絕對必要的。檢查這個SO問題:http://stackoverflow.com/questions/6603000/is-it-necessary-to-call-marshal-releasecomobject-in-c4-when-doing-com –

回答

4

手動內存管理總是一個壞主意,尤其是對於COM對象。你可以從專家那裏得到關於它的意見,來自Visual Studio團隊的blog post帶來了非常好的點。

以防萬一您仍然認爲這是一個好主意,Winforms團隊已經爲您做出決定。由HtmlDocument,HtmlElement,HtmlWindow,HtmlElementCollection等類封裝的接口指針是該類的一個變量。無論如何,你無法打破書中的每一條規則。

這是不是完全不可能有問題,這些包裝類對象很小,所以你可能有一個問題,垃圾收集器運行不足以確保底層的COM對象被釋放。 GC.Collect()是這個的回退。只有在必要時才使用它。

相關問題