web-dev-qa-db-fra.com

Quand fermer la connexion DB sur Android? Chaque fois après la fin de votre opération ou après la sortie de votre application

J'ai une application Android qui accède fréquemment à la base de données sqlite3 locale, pour des raisons de performances, donc je garde toujours la connexion ouverte. Mais un de mes amis m'a recommandé d'ouvrir/fermer la connexion à chaque opération. 

1) Quelle est votre opinion sur ces deux méthodes? inconvénients/avantages. 2) J'ai fait quelques tests et découvert que la connexion à la base de données ne comportait pas trop de frais généraux. La surcharge de performances de la connexion à la base de données varie-t-elle en fonction de la taille de la base de données?

43
jim.huang

Je ne connais aucune pénalité liée aux performances lors de la fermeture/ouverture fréquente de la base de données (quelle que soit sa taille). Je pense que la réponse à cette question dépend également du type d'application accédant à la base de données.

Avez-vous "re-interroger" la base de données beaucoup?
Ensuite, il semble rectifié de le garder ouvert.

Allez-vous chercher des données différentes chaque fois que vous allez chercher quelque chose?
Là encore, il semble raisonnable de le laisser ouvert (vous ne gagnerez pas à mettre les données en cache à la place).

Existe-t-il d'autres applications accédant à la même base de données?
S'il existe un risque de problèmes d'accès simultané ou de blocage, il peut être judicieux de fermer la base de données une fois la lecture/écriture terminée.

En règle générale, je dirais que vous pouvez gagner plus en mise en cache de données qu'en laissant la base de données ouverte (contrairement à la fermeture) lors de l'optimisation des performances.

33
dbm

Si vous utilisez une base de données en mémoire, vos données seront supprimées à la fermeture de la connexion.

Un peu un cas Edge peut-être, mais il m'a juste pris au dépourvu.

6
David Sykes

La documentation indique que la connexion peut être ouverte aussi longtemps que vous en avez besoin. Et peut être fermé dans la méthode onDestroy (). Lien vers la documentation

Connexion persistante à la base de données:

Comme getWritableDatabase () et getReadableDatabase () coûtent cher à appeler Lorsque la base de données est fermée, vous devez laisser la connexion à votre base de données Ouverte aussi longtemps que vous avez besoin d'y accéder. En règle générale, il est préférable de fermer la base de données dans onDestroy () de L’activité appelante.

    @Override
    protected void onDestroy() {
        mDbHelper.close();
        super.onDestroy();
    }
2
Seagull

De plus, si vous ouvrez et fermez une connexion si fréquemment, vous risquez de rencontrer des exceptions notoires SQLite si vous accédez à la base de données à partir de plusieurs threads. 

Vous voyez, si vous accédez à la base de données à partir de plusieurs threads même via une seule connexion et que ces opérations ne sont pas atomiques, vous pouvez alors essayer de mettre à jour la base de données qui a été fermée juste avant par un autre thread.

1
stdout