通过specialCells范围迭代而没有内存泄漏?

时间:2012-05-09 12:47:15

标签: c# excel-interop

我有这样的情况:

Range formulaCells = range.SpecialCells(XlCellType.xlCellTypeFormulas);

我想迭代所有这些。但问题是当我用foreach循环进行内存泄漏时,因为特定单元的范围对象没有被释放。 我试图通过传统的for循环这样做:

for(int i = 1; i <= formulaCells.Count; i++)
{
  Range cell = null;
  try
  {
    cell = formulaCells.get_Item(i);
    // do some work
  }
  catch(Exception e) {throw e;}
  finally
  {
    If(cell != null)
    {
      Marshal.ReleaseCOMObject(cell);
      cell = null;
    }
  }
}

但是get_Item()将行索引作为参数,因此它将遍历没有公式的单元格。我无法迭代它。 我该怎么做?

1 个答案:

答案 0 :(得分:2)

不要将foreach与COM集合一起使用;在内部,它创建一个COM对象。请改用for循环。

Vladimir, formulaCells 包含多个区域(Range.Areas),每个区域都是Excel.Range类型的矩形。因此,您需要遍历所有区域并遍历每个区域的每个单元格。