使用IDisposable清理ExcelInterop对象

使用IDisposable清理ExcelInterop对象

在我的公司中,发布ExcelInterop对象的常见方法是使用IDisposable,方法如下:

Public Sub Dispose() Implements IDisposable.Dispose
    If Not bolDisposed Then
        Finalize()
        System.GC.SuppressFinalize(Me)
    End IfEnd SubProtected 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互操作对象的代码。

我们完全避免使用二点规则..现在,我开始研究如何重新分配(Excel)Interop对象,以及几乎所有关于它的讨论,比如如何正确清除excel互操作对象释放Excel对象主要使用Marshal.ReleaseComObject(),没有一个使用IDisposable接口。

我的问题是:使用IDisposable Interace来释放EXCEL互操作对象有什么缺点吗?如果是的话,这些残疾的优点是什么。


杨魅力
浏览 426回答 2
2回答

德玛西亚99

如果你在寻找一种更清洁的方法,你可以用库格拉..这并不是什么额外的开销(只有两个DLL必须包含在您的参考文件中),您也不必处理隐式垃圾收集。下面的代码是从EXCEL文件中读取10行10列所需的EXCEL 32或Excel.exe留下的进程。我一个月前就有过这个问题写了关于怎么做的说明。比直接处理ExcelInterop要容易得多,也要干净得多。Koogra.IWorkbook&nbsp;workbook&nbsp;=&nbsp;Koogra.WorkbookFactory.GetExcel2007Reader("MyExcelFile.xlsx"); Net.SourceForge.Koogra.IWorksheet&nbsp;worksheet&nbsp;=&nbsp;workbook.Worksheets.GetWorksheetByName("Sheet1"); //This&nbsp;will&nbsp;invididually&nbsp;print&nbsp;out&nbsp;to&nbsp;the&nbsp;Console&nbsp;the&nbsp;columns&nbsp;A-J&nbsp;(10&nbsp;columns)&nbsp; for&nbsp;rows&nbsp;1-10.for&nbsp;(uint&nbsp;rowIndex&nbsp;=&nbsp;1;&nbsp;rowIndex&nbsp;<=&nbsp;10;&nbsp;rowIndex++){ &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(uint&nbsp;columnIndex&nbsp;=&nbsp;1;&nbsp;columnIndex&nbsp;<=&nbsp;10;&nbsp;columnIndex++) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(worksheet.Rows.GetRow(rowIndex).GetCell(columnIndex).GetFormattedValue()); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP