在WinForms中,WebBrowser
控件在HtmlDocument
類型中有一個Document
屬性。 HtmlDocument
實例具有如Forms
,Links
,GetElementsByTagName()
等等的屬性/方法,其返回HtmlElementCollection
實例。當我遍歷一個HtmlElementCollection
時,我得到了HtmlElement
實例。這些HtmlElement
實例具有DomElement
屬性,它是對基礎COM對象的引用。我的問題是,我應該在這些HtmlElement
實例上調用Marshal.ReleaseComObject()
方法還是WinForms在內部管理引用?我應該處置HtmlElement實例嗎?
4
A
回答
4
手動內存管理總是一個壞主意,尤其是對於COM對象。你可以從專家那裏得到關於它的意見,來自Visual Studio團隊的blog post帶來了非常好的點。
以防萬一您仍然認爲這是一個好主意,Winforms團隊已經爲您做出決定。由HtmlDocument,HtmlElement,HtmlWindow,HtmlElementCollection等類封裝的接口指針是該類的一個變量。無論如何,你無法打破書中的每一條規則。
這是不是完全不可能有問題,這些包裝類對象很小,所以你可能有一個問題,垃圾收集器運行不足以確保底層的COM對象被釋放。 GC.Collect()是這個的回退。只有在必要時才使用它。
1
如果您不調用ReleaseComObject函數,則這些對象將由winforms自動釋放。 Msdn說它可以用來控制對象的生命週期,但這不是必需的。
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.releasecomobject.aspx
相關問題
- 1. 我應該處置FontFamily.Families結果嗎?
- 2. 我應該處置一個Mutex嗎?
- 3. 我應該處置XtraGrid元素嗎?
- 4. 從HTMLElement獲取google.maps.Map實例
- 5. 我應該實施ICloneable嗎?
- 6. 我可以實例化我的活動...我應該嗎?
- 7. 我應該設置AssemblyConfigurationAttribute嗎?
- 8. 我應該配置System.Windows.Media.Pen嗎?
- 9. IEventStore實例應該是靜態的嗎?
- 10. 我應該如何配置我的couchone實例?
- 11. 我應該在構造函數中實例化其他類嗎?
- 12. 我應該在XNA中重用模型實例嗎?
- 13. AngularJs - 我應該手動銷燬指令實例嗎?
- 14. 我應該實例化一個新模型嗎?
- 15. 我應該重新使用表適配器實例嗎?
- 16. 我應該在聲明上實例化收集字段嗎?
- 17. 我應該在遊戲中製作一個GUI實例嗎?
- 18. 我應該分享管道代理實例嗎?
- 19. 我應該創建一個新的委託實例嗎?
- 20. 我應該在自己的EC2實例上運行MongoDB嗎?
- 21. 我應該在單獨的OS實例上安裝Sharepoint 2010嗎?
- 22. 我應該存儲同一個文件的多個實例嗎?
- 23. 我應該使用__new__來防止實例化嗎?
- 24. 我應該將文件對話框實現爲單例嗎?
- 25. 我應該刪除用b2World :: CreateBody()創建的b2Body實例嗎?
- 26. 我應該有兩個獨立的mongoDB實例嗎?
- 27. 我應該有返回Disposable實例列表的方法嗎?
- 28. 我應該在dealloc中釋放實例變量和屬性嗎?
- 29. 我應該明確關閉StringIO實例嗎?
- 30. 我應該分配一個NSMUtableArray實例變量嗎?
這不是絕對必要的。檢查這個SO問題:http://stackoverflow.com/questions/6603000/is-it-necessary-to-call-marshal-releasecomobject-in-c4-when-doing-com –