VSTO速度问题

时间:2012-07-23 14:18:32

标签: c# vsto

我编写了一个VSTO DLL来对用户指定的单元格区域执行转换。我是按照以下方式做的:

Globals.ThisAddIn.Application.EnableEvents = false;

int totRows=inputRange.Rows.Count;
int totCols=inputRange.Columns.Count;

for (int i = 1; i <= totRows; i++) {
  for (int j = 1; j <= totCols; j++) {
    if (((Range)inputRange.Cells[i, j]).Value2 != null) {
      ((Range)outputSheet.Cells[i, j]).Value2 = MyTransform(((Range)inputRange.Cells[i, j]).Value2);
    }
  }
}

Globals.ThisAddIn.Application.EnableEvents = true;

这种方法允许我修改大约150万个细胞/小时(我不计算MyTransform()消耗的时间),这在我看来非常慢。

是否有更有效的方法来读取/写入VSTO中的单元格?

如果没有,将它转换为XLL(可能使用Excel-DNA)会更快吗?有什么猜测吗?

1 个答案:

答案 0 :(得分:4)

您正在为正在阅读和设置的每个单元格进行多次COM调用。将整个范围作为数组一次处理会更有效。

这个问题对选项进行了广泛的讨论:Fastest way to interface between live (unsaved) Excel data and C# objects

使用Excel-DNA和Excel C API,您可以每秒读取和写入一百万个单元格,但我猜想即使是通过COM,如果您读取和写入大型数组,性能也会非常好。< / p>