光标

2012-04-30 38 views
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:对不起,我的英语不好,但我是一个法国的:/

+0

我不是说这是答案,但我建议不要在计时操作时插入I/O。 :-)如果在if..else块之后移动所有println()语句,它是否完全改变? (你必须移动回来以测试这个。) – Sparky

回答

1

编辑:
好吧,我发现moveToFirst()需要很长时间因为它实际上是数据库通信。你可以做的事情不多。如果它导致性能问题并阻止您的用户界面,您可以尝试将它移动到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

好吧,我看到了AsyncTask ... 我的BDD有190000行:/ – user1360503

1

我想答案就在这里Why Cursor Operation is taking so much time我引用

好吧,伙计们,我没有在这里一直是acouple days.And我找到了解决方案,你必须为您的表创建索引,这将提高查询速度。

+2

不,增加一个索引并不会减少moveToFirst()所花费的时间,它会减少查询时间本身 –