2011-06-14 26 views
24

Estoy creando una aplicación que utiliza una base de datos SQL para almacenar datos. La forma en que está diseñada la aplicación se actualizará cada 3 minutos más o menos con nuevos datos según las acciones del usuario mientras se ejecuta la aplicación.¿Debo abrir() y cerrar() mi base de datos SQL constantemente o dejarla abierta?

En los tutoriales que he visto, le recomendamos que cierre la base de datos después de cambiarla (es un "costoso" en términos de recursos).

¿Es mejor dejarlo abierto mientras dure mi aplicación, ya que se actualiza con bastante frecuencia o debería ejecutar el método close() inmediatamente después de cada cambio?

Supongo que mi preocupación es que al abrirlo y cerrarlo constantemente se necesitarán más recursos que para dejarlo abierto todo el tiempo.

Respuesta

5

Traté de dejar una conexión abierta una vez - Lo utilicé para rellenar un repetidor o algo - no recuerdo ahora.

Más tarde en el programa, tuve otra necesidad de usar la conexión, creo que la tuve para que cuando un usuario hiciera clic en un elemento principal en el repetidor, apareciera un detalle con más información para ese elemento . Esto generó un error, algo así como 'no se puede abrir() en una conexión abierta'.

Creo que el error podría haber sido evitable de otra manera (como comprobar si la conexión que estaba tratando de abrir ya estaba abierta), pero al pensarlo, me di cuenta de que tendría que convertirlo en un estándar practico en toda mi aplicación, y eso me pareció demasiado trabajo, por lo que solo establecí una práctica estándar para cerrar siempre mis conexiones después de cada uso.

Las conexiones permanecen en un grupo de conexiones, no soy un genio en eso, pero si sentía curiosidad por el rendimiento, creo que lo tendría en cuenta, en términos de lo que cuesta abrir una conexión varias veces - Sea lo que sea que tu situación requiera de todos modos.

Otra idea es que su administrador de base de datos puede forzar el cierre de todas las conexiones abiertas, o la base de datos puede cerrarse por algún otro motivo. Si no eres el dba, podrías pensar en el riesgo/beneficio de depender de algo sobre lo que no tienes control a largo plazo como mantener la conexión abierta.

+0

DBA? ¿Todavía estamos hablando de Android? – LarsH

+0

Administrador de la base de datos – papiro

3

Tres minutos es la eternidad en los procesadores de hoy, incluso los procesadores de teléfono. Lo cerraría y lo abriría cada vez. Es mejor que dejar las manijas colgando en "el éter".

+0

upvote durante tres minutos es la eternidad en los procesadores de hoy –

1

si me preguntas por todo lo que he leído hasta ahora sobre Android y, en general, es mejor cerrarlo justo después de hacer las modificaciones.

Lo que me parece mejor que hacer cuando se puede es en realidad hacer y registrar un proveedor de contenido. Tiene sus precios, pero creo que gana mucho más de lo que paga. Puede hacer casi todo con un proveedor de contenido y el ejemplo de la libreta de notas en el portal de Android es excelente para aprender a implementarlo. se ocupa de la sincronización de DB y de abrirla/cerrarla. así que tal vez investigar eso.

+0

¿Esto se hace mediante la creación de un dbHelper o dbAdapter? – easycheese

+0

eche un vistazo al tutorial del bloc de notas y luego sígalo al proyecto del bloc de notas en ejemplos. http://developer.android.com/resources/tutorials/notepad/index.html – DArkO

+0

es un poco diferente a la implementación de sqlite helper (como un adaptador o simplemente una base de datos simple a la que accederá directamente a través de los métodos). Creo que un proveedor de contenido es realmente una solución realmente agradable. después de hacer muchos proyectos con bases de datos y tener problemas de concurrencia, no cerrar bases de datos o ejecutar bases de datos cerradas, etc., etc., para usar diferentes patrones de diseño para resolver estos problemas, encontré que un proveedor de contenido es la mejor solución y funcionó perfectamente. muy lejos de todas las aplicaciones que he hecho. a pesar de tener una sobrecarga un poco más grande. – DArkO

3

Digamos que tiene que realizar varias operaciones de base de datos en una sola cadena. Mantendría el DB abierto para hacer esas acciones. Sin importar qué tan cerca esté el DB después de hacer un gran trabajo.

3

Creo que la respuesta a esta pregunta también depende del tipo de aplicación que está accediendo a la base de datos.

Si vuelve a consultar la base de datos mucho En este caso puede mantener la base de datos abierta.

¿Hay otras aplicaciones accediendo a la misma base de datos? Si existe un riesgo de problemas de concurrencia o bloqueo, podría ser conveniente cerrar la base de datos después de terminar de leer/escribir desde/hacia ella.

Tener una mirada enla siguiente dirección

When to close db connection on android? Every time after your operation finished or after your app exit

Gracias Deepak

Cuestiones relacionadas