C# 解决速度问题

C# 解决速度问题,c#,vsto,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++)

我已经编写了一个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;
Globals.ThisAddIn.Application.EnableEvents=false;
int totRows=inputRange.Rows.Count;
int totCols=inputRange.Columns.Count;

对于(int i=1;i您正在对正在读取和设置的每个单元格进行多个COM调用。一次将整个范围作为数组处理要高效得多

该问题对以下选项进行了广泛讨论:


使用和Excel C API,您可以每秒读取和写入一百万个单元格,但我猜想,即使通过COM,如果您作为一个大数组进行读取和写入,性能也会相当好。

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

该问题对以下选项进行了广泛讨论:


使用和Excel C API,您可以每秒读取和写入一百万个单元格,但我猜,即使通过COM,如果您作为一个大数组进行读取和写入,性能也会相当好。

我猜您是在线程上运行此代码,以防止UI冻结。在这种情况下,您可以跨越单元边界访问单元格和这太慢了。不禁用自动单元格计算也会使它非常慢。没有线程,界面在长时间运行时或多或少会冻结。我将尝试禁用自动单元格计算,尽管没有计算过的单元格(这是一个名称和地址列表)。我猜您是在线程上运行此代码,以防止UI冻结。在这种情况下,您跨越单元边界访问单元,速度会很慢。不禁用自动单元计算也会使速度非常慢。没有线程,界面在长时间运行时或多或少会冻结。我将尝试禁用自动单元计算,一个尽管没有计算过的单元格(这是一个姓名和地址的列表)。谢谢,这正是我需要的。谢谢,这正是我需要的。