哪种迭代方法读取Excel值会更高效?

时间:2013-07-03 14:46:34

标签: c# performance excel com iteration

由于CodeReview不允许代码段比较,我在这里问我的问题。如果这不符合SO规则,我很抱歉,但我没有办法测试或测试我的问题。

这里......我目前有以下工作代码:

string currentValue, valueToFind;

for (int i = 1; i <= rows; i++)
{
    currentValue = source.CellValueString(i, 1);

    for (int j = 2; j <= localRows; j++)
    {
        valueToFind = target.CellValueString(j, 4);

        if (valueToFind == currentValue)
        {
            //Set Excel cell value
            break;
        }
    }
}

请注意,rowslocalRows通常具有大约300的值,因此这意味着最多90.000次迭代。 sourcetarget是用于处理Excel对象的自定义类的实例。方法CellValueString()仅用于获取单元格的字符串值。我在想,也许以下代码可能更具性能:

//GetValues() would be a method to get the values of the given range
string[] values = source.GetValues("A1:A" + rows);
string[] valuesToCompare = target.GetValues("D2:D" + localRows);

foreach(string currentValue in values)
{
    foreach(string valueToFind in valuesToCompare)
    {
        if(valueToFind == currentValue)
        {
            //Set Excel cell value
            break;
        }
    }
}

这是第二种方法,当一次获取所有值时,比迭代更快,并且在每次迭代时获取Excel中的值进行比较?

欢迎任何其他提高性能的方法!

1 个答案:

答案 0 :(得分:1)

您可以通过添加以下内容来衡量代码的性能(抱歉我只做VBA,但原则也应该在VC中使用):

[A1] = Now()

' your code goes here

[A2] = Now()

将测试代码块之前和之后的系统时间记录到当前工作表的单元格A1和A2中。最重要的是,在[A3]中输入公式=(A2-A1)*86400以秒为单位显示时差(包括小数位)。

有了这一点,我的经验是范围上的大规模操作(即For Each x In y)往往比离散循环快得多。