如何验证Excel互操作对象是否已正确清理?

时间:2016-02-29 15:46:11

标签: c# excel interop com-interop excel-interop

我正在我的项目中实例化Excel互操作对象。我知道需要特别努力来清理这些对象(参见this question)。有没有自动验证清理是否正确完成的方法?

详细说明,我知道当清理工作不正确时,Excel.exe可能会在调用Application.Quit后继续运行。但是,我不清楚这是否是一个可靠的测试条件。此外,由于延迟的Excel.exe进程仅仅是真正功能障碍的症状,如果存在这种情况,最好使用更接近根本原因的测试条件。

1 个答案:

答案 0 :(得分:0)

使用Excel对象完成后,我将此方法称为“以防万一” - 主要是从SO的链接中选择,您还可以参考:

public static void CloseExcel()
{
    GC.Collect();
    GC.WaitForPendingFinalizers();
    if (_range != null)
    {
        Marshal.FinalReleaseComObject(_range);
        _range = null;
    }
    if (_workSheet != null)
    {
        Marshal.FinalReleaseComObject(_workSheet);
        _workSheet = null;
    }
    if (_workBook != null)
    {
        _workBook.Close(false, String.Empty, false);
        Marshal.FinalReleaseComObject(_workBook);
        _workBook = null;
    }
    if (_application != null)
    {
        try
        {
            _application.Quit();
        }
        Marshal.FinalReleaseComObject(_application);
        _application = null;
    }
}

它运行得如此之快,我真的不在乎它是否可以优化。