1. 程式人生 > >在C#中釋放COM物件

在C#中釋放COM物件

公共語言執行時(Common Language Runtime,CLR)通過執行時可呼叫封包器(Runtime Callable Wrapper,RCW)來暴露COM物件。不管對一個COM物件的引用有多少處,執行時都將只建立一個RCW。每個RCW為它所封包的COM物件建立並維持一個介面指標快取,並且直到RCW不再需要使用時才釋放對COM物件的引用。此時,執行時將對RCW執行垃圾回收(Garbage Collection,GC)。

形象點說,執行時環境只會為一個COM物件建立一個封包,這個封包建立並管理呼叫方與COM物件之間的聯絡。當COM物件被使用時,封包就自動將COM物件的引用計數增加1。當COM物件不再被使用時,封包將釋放對COM物件的引用,執行時環境將進行垃圾清理。

C#提供Marshal類,可以用於管理託管的COM物件。需要減少一次對COM物件的引用計數,可以使用Marshal.ReleaseCOMObject方法。清空對COM物件的所有引用計數(置為0),可以使用Marshal.FinalReleaseComObject方法。