Вставка тысяч записей контактов с помощью applyBatch выполняется медленно

Я разрабатываю приложение, в которое мне нужно вставить множество записей контактов. В настоящее время около 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 для использования в качестве внешних ключей в таблице данных?

35
задан Anders 9 April 2011 в 11:29
поделиться