Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 我是否需要释放COM互操作对象的内部对象?_Vb.net_Com Interop_Dispose - Fatal编程技术网

Vb.net 我是否需要释放COM互操作对象的内部对象?

Vb.net 我是否需要释放COM互操作对象的内部对象?,vb.net,com-interop,dispose,Vb.net,Com Interop,Dispose,我有一个托管类,它使用一个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

我有一个托管类,它使用一个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,或者如果我调用ReleaseObject(),gc是否足够聪明,可以自动执行

我的类实现IDisposable,我执行以下atm操作:

Runtime.InteropServices.Marshal.ReleaseComObject(myobj)

我是否需要释放COM对象创建的所有内部对象?如果我必须这样做,那么顺序是否重要(先是内部然后是父级还是父级然后是内部)?

我相当确定您应该分别发布它们。至少在使用Office Automation时,当您不释放所有内部对象时,内存中会出现问题,这是一个常见的原因。在Office中,有这么多集合,很容易做到这一点


我假设其他COM对象也是如此。

COM不会释放内部对象。它是一个对象的实例化,该对象的类恰好属于另一个类。除非外部对象(
myObj
)中有显式代码来保留已创建内部对象的句柄(在调用
CreateInnerClass
中创建),否则COM不知道如何释放它。在myObj的
myObj
类型中可能有代码来执行此操作,但这并不典型