由于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;
}
}
}
请注意,rows
和localRows
通常具有大约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中的值进行比较?
欢迎任何其他提高性能的方法!
答案 0 :(得分:1)
您可以通过添加以下内容来衡量代码的性能(抱歉我只做VBA,但原则也应该在VC中使用):
[A1] = Now()
' your code goes here
[A2] = Now()
将测试代码块之前和之后的系统时间记录到当前工作表的单元格A1和A2中。最重要的是,在[A3]中输入公式=(A2-A1)*86400
以秒为单位显示时差(包括小数位)。
有了这一点,我的经验是范围上的大规模操作(即For Each x In y
)往往比离散循环快得多。