我在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 :(得分: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;
}
}
答案 1 :(得分:1)
我认为答案是Why Cursor Operation is taking so much time,我引用
好吧,大家好,我没有来过这里的日子。我找到了解决方案,你必须为你的表创建索引,这将提高查询速度。