Android循环游标需要花费大量时间

时间:2012-11-29 10:39:44

标签: android sqlite

我有一个包含33列和10行的Andorid游标;但迭代它在Android设备上花了很多时间。

curOutputData.moveToFirst();
        while(curOutputData.isAfterLast()==false);
        {
        //  curOutputData.moveToFirst();
            //curOutputData.moveToNext();
            System.out.println("i am writing data.."+rowIdx);
            cellIdx = 0;
            Row hssfRow = sheet1.createRow(rowIdx++);
            for(int j=0; j<curOutputData.getColumnCount();j++)
            {
                Cell hssfCell = hssfRow.createCell(cellIdx++);
                //String cellValue = curOutputData.getString(j);
                hssfCell.setCellValue(curOutputData.getString(j));
                //System.out.println("cellvalue==="+cellValue);
            }

            curOutputData.moveToNext();
        }

我这样做是为了生成一个excel文件。请告诉我哪里出错了。非常感谢提前。

2 个答案:

答案 0 :(得分:3)

你可以先将moveToFirst + while(!isAfterLast)+ moveToNext替换为相同的while(curOutputData.moveToNext()),并在每次迭代时保存一次对isAfterLast的调用。

然后,我建议您使用traceview来确定您在哪里花时间。它可能是光标,但它也可能是你的excel格式化程序。 (也可以通过评论excel部分进行测试来快速识别。)

(另外,这一切都取决于“花费大量时间”的意思)

备注:为什么要使用具有相同值和相同含义的cellIdx和j?

答案 1 :(得分:0)

另一个答案有一个好处, 另外

for(int j=0; j < curOutputData.getColumnCount(); j++)

每次迭代都会执行命令curOutputData.getColumnCount()。如果结果在循环期间没有改变,则应该在循环之前将值存储为整数。

int size = curOutputData.getColumnCount();
for(int j=0; j < size; j++)

你也可以在循环之前创建Cell hssfCell引用,这样就不需要在每个循环中分配它(不确定dalvik优化有多好)