【发布时间】:2014-08-05 08:12:53
【问题描述】:
在我的公司,发布 Excel 互操作对象的常用方法是使用IDisposable,如下方式:
Public Sub Dispose() Implements IDisposable.Dispose
If Not bolDisposed Then
Finalize()
System.GC.SuppressFinalize(Me)
End If
End Sub
Protected Overrides Sub Finalize()
_xlApp = Nothing
bolDisposed = True
MyBase.Finalize()
End Sub
_xlApp 是在构造函数中通过以下方式创建的:
Try
_xlApp = CType(GetObject(, "Excel.Application"), Excel.Application)
Catch e As Exception
_xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
End Try
并且客户端使用using-statement 来执行有关excel互操作对象的代码。
我们完全避免使用two dot rule。现在我开始研究如何发布(Excel)互操作对象,我发现的几乎所有关于它的讨论,如How to properly clean up excel interop objects 或Release Excel Objects 大多使用Marshal.ReleaseComObject(),没有一个使用IDisposable 接口。
我的问题是:使用IDisposable 接口释放excel 互操作对象有什么缺点吗?如果是这样,这些缺点是什么。
【问题讨论】:
-
以相反的方式实现 Dispose/Finalize 更为常见,让终结器调用 dispose 方法。
标签: .net excel vb.net interop com-interop