2016-02-29 101 views
1

我在我的項目中實例化Excel互操作對象。我知道清理這些物體需要付出特別的努力(見this question)。有沒有自動的方法來驗證清理是否正確完成?如何驗證Excel互操作對象是否被正確清理?

爲了詳細說明,我知道,如果清理工作不正確,Excel.exe可能會在調用Application.Quit後繼續運行。但是,我不清楚這是否是可靠的測試條件。另外,由於延續的Excel.exe過程僅僅是真正的功能障礙的症狀,如果存在這樣的情況,似乎更可取的是使用更接近根本原因的測試條件。

回答

0

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

它跑得快,讓我真的不關心它是否可以優化。

相關問題