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范围.发现自己变得越来越慢

最快的方法取决于你想做什么操作:但可能最好的方法是将数据列分配给对象数组并处理它(对Excel对象模型的每个互操作调用都有非常高的开销)。有关各种方法的比较,请参阅http://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/

在循环时使用dest_cells作为查找下一个匹配的起点。但是这个变量是在寻找K和寻找SND之间共享的,并且这些分布越分开(在找到匹配之后),那么代码就越需要在增加的区域中循环。使用不同的变量,如matchKmatchSnd