我有一个使用 COM 的托管类,如下所示。
Public Class MyClass
Private myobj as SomeComObject
Public Sub New()
myobj = CreateObject("SomeComObject.Class")
End Sub
Public Sub DoSomething()
dim innerobj as SomComObject.InnerClass
innerobj = myobj.CreateInnerClass("arg1", true, 5)
innerobj.DoSomething()
End Sub
End Class
由于我通过 COM-Interob dll 使用非托管 dll,我想知道我是否需要手动释放 innerobj,或者 gc 是否足够智能以在我调用 ReleaseObject() 时自动执行此操作
我的类(class)实现了 IDisposable,我做了以下 atm:
Runtime.InteropServices.Marshal.ReleaseComObject(myobj)
我是否需要注意释放由 COM 对象创建的所有内部对象?如果我必须这样做,顺序是否重要(首先是内部然后是父级 vs 父级然后是内部)?
最佳答案
我相当确定您应该单独发布它们。至少在使用 Office Automation 时,如果您没有释放所有内部对象,这是导致内存卡住的常见原因,这在 Office 中很容易做到,因为有很多集合。
我假设其他 COM 对象也是如此。
关于vb.net - 我是否需要释放 COM Interop 对象的内部对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226443/