我有一些使用Excel COM对象的Excel自动化代码。从其他SO帖子中,我知道应该尽早采取以下措施释放对象:
我在这里不确定的是,如果我释放
Excel.Range rng = GetSomeRange();
// do something with rng...
Marshal.ReleaseComObject(rng);
然而,如果我要循环遍历一个范围内的单元格,以下是否是正确的步骤?
Excel.Range rng = GetSomeRange();
foreach (Excel.Range r in rng)
{
// do something with r
Marshal.ReleaseComObject(r); // release at earliest possible convenience
}
Marshal.ReleaseComObject(rng);
我在这里不确定的是,如果我释放
rng
中的每个r
,然后再释放rng
,我是在正确地释放对rng
和r
的引用,还是相当于释放了两次rng
?
提前感谢!
编辑
我采取了后一种策略:
Excel.Range rng = GetSomeRange();
foreach (Excel.Range r in rng)
{
// do something with r
Marshal.ReleaseComObject(r); // release at earliest possible convenience
}
Marshal.ReleaseComObject(rng);
由于某些优化,它显著地减少了内存占用...
再次感谢大家!
r
这样的小型 COM 对象。请参考这个答案 https://dev59.com/33VC5IYBdhLWcg3w4VNy#159419。 - Eric J.