1

Androidのカーソルに問題があります...

public int getCountNameContainWord(String word){
    long time1=System.currentTimeMillis();
    Cursor cur = bdd.query(TABLE_IDF, new String[] {"COUNT(idfs)"}, "idfs LIKE '"+word+"%'", null, null, null, null, null);
    long time2=System.currentTimeMillis();
    System.out.println("time query : "+(time2-time1));
    if(cur!=null){
        cur.moveToFirst();
        long time3=System.currentTimeMillis();
        System.out.println("time move cursor : "+(time3-time2));
        int i=Integer.parseInt(cur.getString(0));
        return i;
    }else{
        return 0;
    }
}

結果 :

時間クエリ: 3

時間移動カーソル:3784

カーソルの移動が非常に遅く、その理由がわかりません... 結果の行が 1 つしかありません... 速くするアイデアはありますか? 通常、数ミリ秒しかかかりません...

PS : 下手な英語で申し訳ありませんが、私はフランス人です :/

4

2 に答える 2

1

編集:
わかりましたmoveToFirst()、実際のデータベース通信を行うため、時間がかかることがわかりました。あなたがそれについてできることはあまりありません。パフォーマンスの問題を引き起こし、UI をブロックしている場合は、AsyncTask.

Androidカーソルの最初のパフォーマンスの問題への移動

あなたのテーブルはどれくらいの大きさですか?インデックスを追加しidfsて、違いがあるかどうかを確認できます。


きっとSystem.out.printlnすごく時間がかかります。だからこれを試してください:

public int getCountNameContainWord(String word){
    long time1 = System.currentTimeMillis();
    long time2, time3 = 0;
    Cursor cur = bdd.query(TABLE_IDF, new String[] {"COUNT(idfs)"}, "idfs LIKE '"+word+"%'", null, null, null, null, null);
    time2 = System.currentTimeMillis();
    if(cur!=null){
        cur.moveToFirst();
        time3 = System.currentTimeMillis();
        int i=Integer.parseInt(cur.getString(0));
        System.out.println("time query : "+(time2-time1));
        System.out.println("time move cursor : "+(time3-time2));
        return i;
    }else{
        return 0;
    }
}
于 2012-04-30T12:55:19.810 に答える
1

答えはここにあると思いますカーソル操作に時間がかかる理由と私は引用します

わかりました、皆さん、私はここに数日間いません。そして、クエリの速度を向上させるテーブルのインデックスを作成する必要があるという解決策を見つけました。

于 2012-04-30T13:12:46.383 に答える