【发布时间】:2013-07-03 14:46:34
【问题描述】:
由于 CodeReview 不允许 sn-p-comparison,我在这里问我的问题。如果这不符合 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 中获取值进行比较?
欢迎任何其他提高性能的方法!
【问题讨论】:
-
你没有办法执行你的代码?我建议在开头放一个秒表,最后输出经过的时间来比较结果。
-
秒表不是一个选项。这是在 InfoPath 表单后面执行的代码。
标签: c# performance excel com iteration