Estoy desarrollando una aplicación en la que necesito insertar muchas entradas de contactos. En el momento actual, aproximadamente 600 contactos con un total de 6000 números de teléfono. El contacto más grande tiene 1800 números de teléfono.La inserción de miles de entradas de contactos usando applyBatch es lenta
El estado actual es que he creado una cuenta personalizada para guardar los contactos, por lo que el usuario puede seleccionar ver el contacto en la vista de contactos.
Pero la inserción de los contactos es muy lenta. Inserto los contactos usando ContentResolver.applyBatch. He intentado con diferentes tamaños de la lista ContentProviderOperation (100, 200, 400), pero el tiempo total de ejecución es de aprox. lo mismo. ¡Insertar todos los contactos y números toma alrededor de 30 minutos!
La mayoría de los problemas que he encontrado con respecto a la inserción lenta en SQlite muestran las transacciones. Pero como utilizo ContentResolver.applyBatch-method, no controlo esto, y supongo que ContentResolver se ocupa de la gestión de transacciones por mí.
Por lo tanto, a mi pregunta: ¿Estoy haciendo algo mal, o hay algo que pueda hacer para acelerar esto?
Anders
Editar: @jcwenger: Oh, ya veo. ¡Buena explicación!
Así que tendré que insertar primero en la tabla raw_contacts y luego en la tabla de datos con el nombre y los números. Lo que perderé es la referencia anterior al raw_id que uso en applyBatch.
Así que tendré que obtener todas las identificaciones de las filas raw_contacts recientemente insertadas para usarlas como claves foráneas en la tabla de datos?
@Anders, tenga en cuenta que usted puede hacer comentarios en el post de jcwenger directamente con el 'añadir comment' enlace bajo su cargo; puede parecer que no importa ahora, pero las preguntas con una docena de respuestas se vuelven difíciles de manejar si cada respuesta estuviera en la pregunta. (También las publicaciones se convierten en [comunidad wiki] (http://stackoverflow.com/faq#reputation) después de muchas ediciones ([diez para autoediciones, cinco usuarios para otros] (http://meta.stackexchange.com/questions/) 11740/what-are-community-wiki-posts)), donde es imposible obtener más reputación, por lo que actualizar las publicaciones para incluir nueva información es excelente, pero a veces solo bastará con un comentario.) – sarnold
¿Puede proporcionar una mejora de velocidad? ¿factor? dijiste que solía llevarte 30 minutos, ¿qué tal ahora? ¿cuánto tiempo se tarda? – Buffalo
Tiene algún tipo de error en su código. Por ejemplo, si su 'retro-referencia' siempre es 0, eso quiere decir que está insertando un ítem a la vez y bloquearlo por él, es un cambio descendente. Voy a poner ejemplo de insertar la misma cantidad de elementos, que tomó 30 segundos. – Kvant