我很好奇,如果有人在查詢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鎖定
- 2. Android ContentProvider和ContentProviderOperation.newUpdate()
- 3. Android ContentProvider與服務
- 4. Android - 在contentProvider中選擇max
- 5. 無法讓Android ContentProvider工作
- 6. android:有關ContentProvider的問題
- 7. 的Android的ContentProvider有NotifyChange
- 8. Android庫項目中的ContentProvider
- 9. Android IPC和ContentProvider的差異
- 10. 沒有ContentProvider的Android Sqlite
- 11. Android Beam ContentProvider Uri失敗
- 12. 的Android定製的ContentProvider
- 13. 的ContentProvider的Android許可
- 14. ContentProvider中的SQLException
- 15. AppWidgetProvider和ContentProvider
- 16. ContentProvider vs活動
- 17. Robolectric ContentProvider測試
- 18. 創建和使用的ContentProvider爲Android
- 19. UriMatcher與ContentProvider中的uri不匹配Android
- 20. Android CursorLoader對ContentProvider通知沒有響應
- 21. 在Android Studio 2.3.3中創建ContentProvider
- 22. Android ContentProvider訪問練習列表?
- 23. Android SDK:聯繫人ContentProvider的源代碼
- 24. Android - 從SMS ContentProvider檢索數據 - GROUP BY
- 25. Android - 使用Dao模式和contentProvider
- 26. Android:使用ContentProvider和Loader刷新ListFragement
- 27. 通過ContentProvider的Android位圖緩存
- 28. Android的ContentProvider的查詢條件問題
- 29. 的Android的ContentProvider/SQLiteDatabase查詢COUNT(*)
- 30. 我的Android ContentProvider無法找到ContentResolver
作爲一個方面說明,我在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