【发布时间】:2015-07-09 14:54:31
【问题描述】:
我有一些使用 Excel COM 对象的 Excel 自动化代码。从other SO posts我知道应该做以下事情以尽早释放对象:
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 到@987654330 @ 和 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 对象。看到这个答案stackoverflow.com/a/159419/141172
标签: c# com-interop excel-addins excel-automation