[英]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.