0

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ファイルを生成するためにこれをやっています。私が間違っているところにアドバイスしてください。よろしくお願いします。

4

2 に答える 2

3

moveToFirst + while(!isAfterLast) + moveToNext をwhile(curOutputData.moveToNext())同じ単一のものに置き換えることから始めることができ、反復ごとに isAfterLast への呼び出しを 1 回節約できます。

次に、traceview時間を費やす場所を特定するために を使用することをお勧めします。カーソルである可能性がありますが、Excel フォーマッターである可能性もあります。(これは、テスト用の Excel 部分にコメントを付けることによってもすぐに特定できます)。

(また、それはすべて、「多くの時間がかかる」という意味に依存します)

注: 同じ値と同じ意味を持つ cellIdx と j を使用するのはなぜですか?

于 2012-11-29T10:45:41.900 に答える
0

もう1つの答えには1つの良い点があり、さらに

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

反復ごとにコマンドcurOutputData.getColumnCount()が実行されます。ループ中に結果が変わらない場合は、ループの前に値を整数で格納する必要があります。

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

ループの前に参照を作成してCell hssfCell、ループごとに割り当てる必要がないようにすることもできます(dalvikがどれだけ最適化されているかわからない)

于 2012-11-29T11:08:21.240 に答える