我正在尝试优化我的应用程序。我注意到cursor.movetofirst()方法以某种方式降低了代码的性能。
Cursor cursor = myDbHelper.getDayInfo(new SimpleDateFormat("yyyy-MM-dd").format(myCalendar.getTime());上面的行在2.1模拟器中的10 ms中执行,并且
if(cursor != null && cursor.moveToFirst()) 这一行大约花费了1.6秒。我几乎没查过这件事。有人说,在另一个线程或异步任务中使用它,但这会使代码更加复杂。我只是想弄清楚这个光标到底发生了什么。有人能简化我的问题,或者给出一个关于数据库性能提升的提示吗?
发布于 2011-08-05 09:01:58
很自然,moveToFirst()方法比其他代码获得更多的时间。实际发生数据查询,调用数据库通信、数据读取等。你真的不能用它做任何事。这个建议是正确的--把所有长时间的操作都转移到AsyncTask。
发布于 2011-11-18 04:34:10
这句话已经有一段时间没有被标记过了,但你在这里从来没有得到过一个很好的答案。即使在一个非常大的表上,单行查询通常也要花费不到1.6秒的时间。之所以速度慢,是因为您没有正在查询的列的索引,因此它必须扫描整个表才能找到这些值。如果创建一个索引,则可以将时间缩短到一秒的一小部分。
发布于 2011-08-05 09:10:45
如果光标持有的数据集很大,则移动游标需要时间。您必须在一个单独的线程上执行这种数据密集型操作。使用AsyncTask可能会使您的代码变得有点复杂,但这是值得的。这是针对以用户体验中断为代价而阻塞的用户线程进行的。
https://stackoverflow.com/questions/6953656
复制相似问题