我正在我的项目中实例化Excel互操作对象。我知道需要特别努力来清理这些对象(参见this question)。有没有自动验证清理是否正确完成的方法?
详细说明,我知道当清理工作不正确时,Excel.exe可能会在调用Application.Quit后继续运行。但是,我不清楚这是否是一个可靠的测试条件。此外,由于延迟的Excel.exe进程仅仅是真正功能障碍的症状,如果存在这种情况,最好使用更接近根本原因的测试条件。
答案 0 :(得分:0)
使用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;
}
}
它运行得如此之快,我真的不在乎它是否可以优化。