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

移动光标很慢,我不知道为什么......只有一个结果行......你有什么想法让它更快吗?通常,它只需要几毫秒...

PS:对不起我的英语不好,但我是法国人:/

4

2 回答 2

1

我认为答案就在这里为什么光标操作需要这么多时间,我引用

好的,伙计们,我已经有几天没来了。我找到了解决方案,即您必须为您的表创建索引,这将提高查询速度。

于 2012-04-30T13:12:46.383 回答
1

编辑:
好的,我发现这moveToFirst()需要很长时间,因为它进行实际的数据库通信。您对此无能为力。如果它导致性能问题并阻止您的 UI,您可以尝试将其移动到AsyncTask.

android光标movetofirst性能问题

你的桌子有多大?您可以尝试添加索引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 回答