在我的公司中,释放Excel Interop对象的常见方法是使用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 Interop对象的代码。
我们完全避免使用 两个点规则。现在,我开始研究如何释放(Excel)Interop对象,几乎所有讨论都像How to properly clean up excel interop objects或Release Excel Objects一样,主要使用Marshal.ReleaseComObject()
,没有使用IDisposable
接口。
我的问题是:使用IDisposable
接口释放Excel Interop对象是否有任何缺点?如果有,这些缺点是什么。