簡體   English   中英

如何驗證Excel互操作對象已正確清理?

[英]How can I verify that Excel interop objects are cleaned up properly?

我正在項目中實例化Excel互操作對象。 我知道清理這些對象需要付出特別的努力(請參閱此問題 )。 是否有任何自動方式來驗證清理是否正確完成?

詳細地說,我知道當清理未正確完成時,在調用Application.Quit之后Excel.exe可能會繼續運行。 但是,我不清楚這是否是可靠的測試條件。 此外,由於揮之不去的Excel.exe進程僅僅是真正功能障礙的症狀,因此,如果存在這樣的條件,則最好使用更接近根本原因的測試條件。

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

它運行如此之快,以至於我真的不在乎是否可以對其進行優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM