2012-04-30 11 views
1

私は、Androidでのカーソルに問題がある...アンドロイドでカーソル(SQLiteの)

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を取るEDIT/

+0

これは答えではありませんが、タイミング操作時にI/Oを挿入することをお勧めします。 :-) if..elseブロックの後にすべてのprintln()ステートメントを移動すると、それはまったく変わりますか? (これをテストするためにリターンも移動する必要があります) – Sparky

答えて

1


[OK]を、私はmoveToFirst()は長い時間がかかることが判明しましたそれは実際のデータベース通信を行うためです。あなたはそれについて多くを行うことはできません。パフォーマンス上の問題を引き起こし、UIをブロックしている場合は、AsyncTaskに移動してみてください。

android cursor movetofirst performance issue

あなたのテーブルには、どのくらいでしょうか? 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; 
    } 
} 
+0

同じです: 時間クエリ:4 時間移動カーソル:3652 – user1360503

+0

私の編集した答えを参照してください。 – Caner

+0

OK、AsyncTask ... 私のBDDに190000行があります:/ – user1360503

1

を私は答えはここにWhy Cursor Operation is taking so much timeだと思うと、私は、人を

OK引用、私はacouple days.Andのためにここにされていない私はあなたが持っている解決策を見つけましたテーブルのインデックスを作成して、クエリの速度を向上させます。

+2

いいえ、インデックスを追加することでmoveToFirst()にかかる時間が短縮され、クエリ時間自体が短縮されます –

関連する問題