Limpie los objetos de interoperabilidad de Excel con IDisposable
En mi empresa, la forma común de liberar objetos de interoperabilidad de Excel es usar IDisposable de la siguiente manera:
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
dónde_xlApp
fue creado en el constructor de la siguiente manera:
Try
_xlApp = CType(GetObject(, "Excel.Application"), Excel.Application)
Catch e As Exception
_xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
End Try
Y el cliente usa elusing-statement
para ejecutar código sobre objetos de interoperabilidad de Excel.
Evitamos completamente usar elregla de dos puntos. Ahora comencé a investigar cómo liberar objetos de interoperabilidad (Excel) y casi todas las discusiones que encontré al respectoCómo limpiar correctamente los objetos de interoperabilidad de Excel oLiberar objetos de Excel utilizan principalmente Marshal.ReleaseComObject (), ninguno de ellos utiliza la interfaz IDisposable.
Mi pregunta es: ¿Hay alguna desventaja al usar la interacción IDisposable para liberar objetos de interoperabilidad de Excel? Si es así, ¿cuáles son estas desventajas?