vb.net - 我是否需要释放 COM Interop 对象的内部对象?

标签 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
        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/

相关文章:

asp.net - 需要按年份将日期列拆分为多个列

iphone - 使用 ifstream 读写二进制字符串的正确格式

mysql - 如何从datagridview插入数据到数据库mysql vb.net

vb.net - 在 ASPX 页面中使用 webmethod 服务 AJAX 请求

c# - 在这种情况下, "not disposing StreamWriter"是否可能导致内存泄漏?

c# - 使用 C# 类库作为 COM+ 服务器应用程序

.net - Excel Interop 在禁用宏的情况下打开 Excel

.net - 从 COM ProgID 加载 .NET 程序集而不创建 COM 对象

c# - Datatable.Dispose() 会让它从内存中删除吗?

c# - FileStream.Dispose 就够了吗?