46 votes

Quand fermer la connexion db sur Android ? Chaque fois que votre opération est terminée 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, 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 ? contre/pour. 2) J'ai fait quelques tests et j'ai trouvé que la connexion à la base de données n'avait pas trop d'impact sur la performance. Est-ce que la surcharge de performance de la connexion DB varie en fonction de la taille de la base de données ?

33voto

dbm Points 3814

Je ne connais pas de pénalités de performance dans 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 qui accède à la base de données.

Interrogez-vous souvent la base de données ?
Alors il semble rectifié de le garder ouvert.

Est-ce que vous récupérez des données différentes à chaque fois que vous récupérez quelque chose ?
Là encore, il semble raisonnable de le laisser ouvert (car vous ne gagnerez rien à mettre les données en cache à la place).

Y a-t-il d'autres applications qui accèdent à la même base de données ?
S'il existe un risque de problèmes de concurrence ou de blocage, il peut être judicieux de fermer la base de données après avoir fini de lire/écrire depuis/vers elle.

En général, je dirais que vous gagnez plus à mettre les données en cache qu'à laisser la base de données ouverte (ou à la fermer) lorsque vous optimisez les performances.

6voto

David Sykes Points 9683

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

C'est un peu un cas limite peut-être, mais ça m'a interpellé.

3voto

Seagull Points 543

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

Persistance de la connexion à la base de données :

Étant donné que getWritableDatabase() et getReadableDatabase() sont coûteux pour lorsque la base de données est fermée, vous devez laisser votre connexion à la base de données ouverte aussi longtemps que vous avez besoin d'y accéder. base de données ouverte aussi longtemps que vous avez besoin d'y accéder. En général, il est optimal de fermer la base de données dans le onDestroy() de l'activité appelante.

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

2voto

zgulser Points 925

En outre, l'ouverture et la fermeture d'une connexion aussi fréquemment peut entraîner des exceptions SQLite notoires si vous accédez à la base de données à partir de plusieurs threads.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X