Мне интересно, если кто-либо выполнил любое тестирование производительности при запросе ContentProvider
через ContentResolver
против запроса объекта SQLiteDatabase
в том же процессе. Я предполагаю, что запрос ContentResolver
возвращает курсор, который связывается с базой данных через Binder (Android IPC). Это означает, что если я прочитаю содержимое 100 записей через Cursor
, что приведет к вызову 100 вызовов Binder. Правильны ли мои догадки, и если это будет значительно медленнее, чем доступ к базе данных в том же процессе?Производительность Android ContentProvider
ответ
Я не сделал именно этот опрос. То, что я сделал, - это измерить производительность нескольких вложений через ContentProvider или напрямую через базу данных SQLite. Я вставил около 1000 предметов (один за другим). С помощью ContentProvider было гораздо медленнее вставлять их. В моем тесте почти на 10% медленнее.
Если вы собираетесь вставлять по 1000 элементов один за другим, вы должны использовать 'ContentProviderOperation' и выполнять' batchInsert'. Вставка 1000 предметов по одному будет невероятно медленной, независимо от того, что вы используете, поэтому я бы не стал слишком заглядывать в этот тест. По моему опыту, разница между «использованием« ContentProvider »и« не использованием «ContentProvider» никогда не снижалась до скорости/эффективности, с которой выполняются операции. –
- 1. Android - запрос SMS ContentProvider?
- 2. Android: AsyncQueryHandler и ContentProvider
- 3. android: вопросы о ContentProvider
- 4. Android ContentProvider Уникальные запросы
- 5. Android ContentProvider Uri Matching
- 6. Android ContentProvider Uri Matching
- 7. Android ContentProvider vs ORMLite
- 8. Android пользовательского ContentProvider
- 9. Android - ContentProvider - пользовательские разрешения
- 10. Android ContentProvider не возвращает Phone.NUMBER
- 11. android: syncable = true для ContentProvider?
- 12. Android ContentProvider Проблема с курсором
- 13. Android ContentProvider с файлами JSON
- 14. Android ContentProvider/SQLiteDatabase COUNT запроса (*)
- 15. Реализация эффективного ContentProvider на Android
- 16. Android ContentProvider найти другие URI
- 17. Android: Какова продолжительность жизни ContentProvider?
- 18. Белая маркировка с ContentProvider
- 19. Производительность Android
- 20. my Android ContentProvider не может найти ContentResolver
- 21. Android Contentprovider - обновление в методе вставки
- 22. Android RecyclerView + CursorLoader + ContentProvider + «Загрузить больше»
- 23. UriMatcher не соответствует uri в ContentProvider Android
- 24. Android ContentProvider запрос базы данных несколько таблиц
- 25. Не удается заставить Android ContentProvider работать
- 26. Android SQLite с ContentProvider и BaaS
- 27. Android Facebook ContentProvider и несколько Построить Типы
- 28. Android ContentProvider проверяет доступ к сети
- 29. Как протестировать исключение, брошенное в Android ContentProvider
- 30. Android - Использование ORMLite DAO как ContentProvider
В качестве побочного примечания я выполнил тест на устройстве Android на 800 МГц, сравнивая вызовы локальных методов с вызовами удаленных методов. Вызов удаленного метода с простым 26-символьным строковым параметром занимает примерно 400 наносекунд дольше, чем вызов локального метода. Отправка 10 000 символов String paramater занимает 2,3 миллисекунды дольше. Ясно, что чем больше данных будет отправлено (или получено), тем дольше это займет. – satur9nine
Что-то, чему я научился: курсоры, переданные ContentProviders, содержат CursorWindow, CursorWindow - это кешированная область Cursor 2MB в размере, большинство запросов будут помещаться во весь буфер. Таким образом, доступ к данным из Курсора обычно не инициирует вызов метода Binder, так как все данные уже есть, однако, если вы попытаетесь прочитать данные вне CursorWindow в огромном курсоре, тогда окно нужно будет переместить, и кэш будет подвергнут повторению Связующее. – satur9nine