我有一些使用 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);
我在这里不确定的是,如果我释放每个r
,rng
然后我也释放rng
我是否有效地释放rng
了两次或正确地释放r
了对rng
和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);
这大大减少了内存......
再次 - 谢谢大家!