我很好奇,如果有人在查询ContentProvider
通过ContentResolver
与在同一过程中查询SQLiteDatabase
对象进行任何性能测试。我猜测ContentResolver
查询返回一个Cursor,它通过一个Binder(Android IPC)与数据库进行通信。这意味着如果我通过Cursor
读取了100条记录的内容,那将导致100个Binder方法调用。我的猜测是否正确,如果是这样,那会比在同一过程中访问数据库慢得多?Android ContentProvider性能
14
A
回答
3
我还没有完成那个测量。我所做的是通过ContentProvider或直接通过SQLite数据库来确定多个插入的性能。 我插入了大约1000个项目(一个接一个)。通过ContentProvider插入要慢得多。在我的测试中,速度慢了近10%。
+3
如果您打算逐个插入1000个项目,那么您将使用“ContentProviderOperation”并执行一个'batchInsert'。无论您使用什么内容,逐个插入1000个项目都会非常慢,所以我不会太多地考虑这个基准。根据我的经验,“使用”ContentProvider“”和“不使用”ContentProvider“”之间的区别决不会落在执行操作的速度/效率上。 – 2012-10-15 17:23:28
相关问题
- 1. Android ContentProvider和ContentProviderOperation.newUpdate()
- 2. Android contentprovider锁定
- 3. Android Beam ContentProvider Uri失败
- 4. android:有关ContentProvider的问题
- 5. Android - 在contentProvider中选择max
- 6. 的Android定制的ContentProvider
- 7. 没有ContentProvider的Android Sqlite
- 8. ContentProvider中的SQLException
- 9. AppWidgetProvider和ContentProvider
- 10. Android的ContentProvider的查询条件问题
- 11. Android ContentProvider访问练习列表?
- 12. 的Android的ContentProvider没有返回Phone.NUMBER
- 13. Android ContentProvider数据库查询多个表
- 14. Android - 从SMS ContentProvider检索数据 - GROUP BY
- 15. Android SDK:联系人ContentProvider的源代码
- 16. 的Android SQLite的用的ContentProvider或SQLiteOpenHelper
- 17. 创建和使用的ContentProvider为Android
- 18. 我的Android ContentProvider无法找到ContentResolver
- 19. Android - 使用Dao模式和contentProvider
- 20. Android CursorLoader对ContentProvider通知没有响应
- 21. UriMatcher与ContentProvider中的uri不匹配Android
- 22. Android:使用ContentProvider和Loader刷新ListFragement
- 23. Android png性能
- 24. Android getDrawable性能
- 25. HeapWorker Android性能
- 26. Android HttpClient性能
- 27. Android Viewpager性能
- 28. 对于ContentProvider,android:syncable = true?
- 29. 删除ContactsContract-的ContentProvider
- 30. Android性能改进
作为一个方面说明,我在800MHz的android设备上进行了测试,比较了调用本地方法和远程方法的调用。使用简单的26个字符调用远程方法字符串参数比调用本地方法花费的时间大约400纳秒。发送10,000个字符的字符串参数需要2.3毫秒的时间。很明显,发送(或接收)的数据越多,需要的时间越长。 – satur9nine 2011-07-11 19:14:45
我学到的东西:ContentProviders传递的游标包含CursorWindow,CursorWindow是游标大小为2MB的缓存区域,大多数查询都适合整个缓冲区。因此,从Cursor访问数据通常不会启动Binder方法调用,因为所有数据都已经存在,但是如果您试图在巨大的光标中读取CursorWindow之外的数据,那么Window将需要移动并且缓存将重新发送粘合剂。 – satur9nine 2014-06-04 23:07:59