簡體   English   中英

C#:從Interop.Visio COM對象釋放內存

[英]C#: Freeing memory from Interop.Visio COM objects

我正在使用C#在Visio中自動化繪圖。 我正在使用Microsoft.Office.Interop.Visio。 當我使圖形自動化時,我將創建7個Shape對象。當圖形完成並完成功能時,我在診斷中注意到內存使用量不斷增加。 它開始時為16MB,每運行2次,單擊一次按鈕以創建圖形,則內存增加1MB。

阻止這種情況發生的唯一方法是使用GC.Collect()。 但是從我的所有閱讀中,每個人都說不要使用它。 那么關閉COM對象的正確方法是什么呢? 我還讀到這可能是GC.Collect可以使用的罕見實例之一,但不確定。

正確的方法是在使用完COM對象后立即使用Marshal.ReleaseComObject

是的,假設您不使用大量的COM對象,GC.Collect的工作效率將達到90%。 但是由於COM對象是本機資源,因此與托管資源相比,GC無法很好地確定這些對象的生命周期。

Microsoft有一篇文章建議,GC發生沖突的可能性很小,並且會導致內存損壞(我已經看過很多次了,最終結果是AccessViolation異常或.NET堆棧損壞)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM