Excel范围.发现自己变得越来越慢
本文关键字:越来越 自己 范围 发现 Excel | 更新日期: 2023-09-27 17:49:13
我有一个像这样的列文件:
- K
- K
- K
- 与
- P
- P
- 与
- K
…
列长度,例如20000。我使用下面的c#代码沿着这一列移动:
while (true)
{
// Find SND
dest_cells = ex_cells.Find("SND", dest_cells, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByColumns,
Excel.XlSearchDirection.xlNext, false, false, false);
// END?
if (dest_cells.Row < row)
return false;
row = dest_cells.Row;
// Find K
dest_cells = ex_cells.Find("K", dest_cells, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByColumns,
Excel.XlSearchDirection.xlNext, false, false, false);
// END?
if (dest_cells.Row < row)
return false;
row = dest_cells.Row;
// Some operations
/*there were some operations, but I commented them. So they don't influence on performance*/
}
每次结果搜索的持续时间在增加。我没有测量时间。但只是为了解释,就让它这样吧:第一次查找需要0.1秒,第二次0.2秒,第10次1秒,第20次2秒,以此类推。
为什么?我听不懂
最快的方法取决于你想做什么操作:但可能最好的方法是将数据列分配给对象数组并处理它(对Excel对象模型的每个互操作调用都有非常高的开销)。有关各种方法的比较,请参阅http://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/
在循环时使用dest_cells
作为查找下一个匹配的起点。但是这个变量是在寻找K
和寻找SND
之间共享的,并且这些分布越分开(在找到匹配之后),那么代码就越需要在增加的区域中循环。使用不同的变量,如matchK
和matchSnd