Я разрабатываю приложение, в которое мне нужно вставить множество записей контактов. В настоящее время около 600 контактов с 6000 телефонных номеров. Самый большой контакт имеет 1800 телефонных номеров.
На сегодняшний день я создал специальную учетную запись для хранения контактов, чтобы пользователь мог выбрать отображение контакта в представлении «Контакты».
Но установка контактов происходит очень медленно. Вставляю контакты с помощью ContentResolver.applyBatch. Я пробовал использовать разные размеры списка ContentProviderOperation (100, 200, 400), но общее время работы составляет прибл. такой же. Для вставки всех контактов и номеров требуется около 30 минут!
Большинство обнаруженных мной проблем, связанных с медленной вставкой в SQlite, вызывает транзакции. Но поскольку я использую ContentResolver.applyBatch-method, я не контролирую это, и я предполагаю, что ContentResolver позаботится об управлении транзакциями за меня.
Итак, на мой вопрос: я что-то делаю не так, или есть что я могу сделать, чтобы ускорить это?
Андерс
Редактировать:
Но установка контактов происходит очень медленно. Вставляю контакты с помощью ContentResolver.applyBatch. Я пробовал использовать разные размеры списка ContentProviderOperation (100, 200, 400), но общее время работы составляет прибл. такой же. Для вставки всех контактов и номеров требуется около 30 минут!
Большинство обнаруженных мной проблем, связанных с медленной вставкой в SQlite, вызывает транзакции. Но поскольку я использую ContentResolver.applyBatch-method, я не контролирую это, и я предполагаю, что ContentResolver позаботится об управлении транзакциями за меня.
Итак, на мой вопрос: я что-то делаю не так, или есть что я могу сделать, чтобы ускорить это?
Андерс
Редактировать:
Но установка контактов происходит очень медленно. Вставляю контакты с помощью ContentResolver.applyBatch. Я пробовал использовать разные размеры списка ContentProviderOperation (100, 200, 400), но общее время работы составляет прибл. такой же. Вставка всех контактов и номеров занимает около 30 минут!
Большинство обнаруженных мной проблем, связанных с медленной вставкой в SQlite, вызывает транзакции. Но поскольку я использую ContentResolver.applyBatch-method, я не контролирую это, и я предполагаю, что ContentResolver позаботится об управлении транзакциями за меня.
Итак, на мой вопрос: я что-то делаю не так, или есть что я могу сделать, чтобы ускорить это?
Андерс
Редактировать: я пробовал с разными размерами списка ContentProviderOperation (100, 200, 400), но общее время работы составляет прибл. такой же. Вставка всех контактов и номеров занимает около 30 минут!
Большинство обнаруженных мной проблем, связанных с медленной вставкой в SQlite, вызывает транзакции. Но поскольку я использую ContentResolver.applyBatch-method, я не контролирую это, и я предполагаю, что ContentResolver позаботится об управлении транзакциями за меня.
Итак, на мой вопрос: я что-то делаю не так, или есть что я могу сделать, чтобы ускорить это?
Андерс
Редактировать: я пробовал с разными размерами списка ContentProviderOperation (100, 200, 400), но общее время работы составляет прибл. такой же. Для вставки всех контактов и номеров требуется около 30 минут!
Большинство обнаруженных мной проблем, связанных с медленной вставкой в SQlite, вызывает транзакции. Но поскольку я использую ContentResolver.applyBatch-method, я не контролирую это, и я предполагаю, что ContentResolver позаботится об управлении транзакциями за меня.
Итак, на мой вопрос: я что-то делаю не так, или есть что я могу сделать, чтобы ускорить это?
Андерс
Редактировать: @jcwenger: О, я вижу. Хорошее объяснение!
Тогда мне придется сначала вставить в таблицу raw_contacts, а затем в таблицу данных с именем и номерами. Что я потеряю, так это обратную ссылку на raw_id, который я использую в applyBatch.
Так что мне придется получить все идентификаторы только что вставленных строк raw_contacts для использования в качестве внешних ключей в таблице данных?