如何验证是否正确清理了 Excel 互操作对象
本文关键字:Excel 对象 互操作 何验证 验证 是否 | 更新日期: 2023-09-27 18:36:55
我正在项目中实例化 Excel 互操作对象。我知道需要特别努力来清理这些对象(请参阅此问题)。是否有任何自动方法来验证清理是否正确完成?
详细地说,我知道当清理未正确完成时,Excel.exe可能会在调用Application.Quit后继续运行。但是,我不清楚这是否是一个可靠的测试条件。此外,由于挥之不去的 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;
}
}
它运行得如此之快,以至于我真的不在乎它是否可以优化。