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

本文关键字:Excel 对象 互操作 何验证 验证 是否 | 更新日期: 2023-09-27 18:36:55

我正在项目中实例化 Excel 互操作对象。我知道需要特别努力来清理这些对象(请参阅此问题)。是否有任何自动方法来验证清理是否正确完成?

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

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

使用完 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;
    }
}

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