0

由于 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;
        }
    }
}

请注意,rowsandlocalRows通常具有大约 300 的值,因此这意味着最多 90.000 次迭代。source并且target是用于处理 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 中获取值进行比较?

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

4

1 回答 1

1

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

[A1] = Now()

' your code goes here

[A2] = Now()

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

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

于 2013-07-03T15:03:23.370 回答