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

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

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


当完成使用Excel对象时,我将这种方法称为“以防万一” - 主要是从链接中选取的,您也可以参考:

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;
    }
}

它运行得非常快,我真的不在乎它是否可以优化。

链接地址: http://www.djcxy.com/p/35717.html

上一篇: How can I verify that Excel interop objects are cleaned up properly?

下一篇: Excel Interop CustomDocumentProperties in foreach Causes Hang