我正在尝试优化我的应用程序。我注意到cursor.movetofirst()方法以某种方式降低了我的代码的性能。
Cursor cursor = myDbHelper.getDayInfo(new SimpleDateFormat("yyyy-MM-dd").format(myCalendar.getTime());
2.1 emulator 中的 10 ms
if(cursor != null && cursor.moveToFirst())
此行大约耗时<1.6秒。我对此没什么了解。有人说在另一个线程或asynctask中使用它,但这会使代码更复杂。 我只想弄清楚这个游标实际发生了什么。 任何人都可以简化或提示与我的问题相关的数据库性能提升吗?
答案 0 :(得分:2)
已经有一段时间了,因为这标记得到了回答,但你从来没有真正得到一个很好的答案。即使在非常大的表上,单行查询通常也应该少于1.6秒。它的速度很慢的原因是您没有要查询的列的索引,因此必须扫描整个表以查找这些值。如果您创建索引,则可以将时间缩短到几分之一秒。
答案 1 :(得分:0)
很自然,moveToFirst()方法比其他代码获得更多的时间。实际发生数据enquariyng,它调用数据库通信,数据读取等。你实际上无法做任何事情。建议是正确的 - 将所有长期操作移至AsyncTask。
答案 2 :(得分:0)
如果光标所持有的数据集很大,移动光标需要花费时间。您必须在单独的线程上执行此类数据密集型操作。使用AsyncTask
可能会使您的代码变得有点复杂,但这是值得的。这是以牺牲UI体验为代价阻止用户线程的。