Quand fermer la connexion db sur android? Chaque fois que votre opération terminée ou après votre sortie de l'application

j'ai une application android qui accède sqlite3 db locale fréquemment, pour des considérations de performance 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 j'ai trouvé que la connexion DB n'a pas trop de perf au-dessus. Les performances de la connexion DB varient-elles en fonction de la taille de la DB ?

43
demandé sur jim.huang 2011-01-30 12:16:52

4 réponses

je ne sais pas du tout de la performance des pénalités fréquentes de fermeture/ouverture de la base de données (quelle que soit sa taille). Je pense que la réponse à cette question dépend aussi du type d'application qui accède à la base de données.

est-ce que vous" réinterrogez " souvent la base de données?

Il semble alors rectifié pour le garder ouvert.

Ne vous récupérer différentes données chaque fois que vous chercher quelque chose?

Encore une fois, il semble raisonnable de le laisser ouvert (comme vous ne gagnerez pas à 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 y a un risque de problèmes de concurrence ou de blocage, il peut être sage de fermer la base de données après avoir terminé la lecture/écriture à partir de/vers elle.

généralement, je dirais que vous pourriez gagner plus dans la mise en cache de données que dans laisser la base de données ouverte (contre-fermeture) lors de l'optimisation de la performance.

33
répondu dbm 2011-01-30 10:20:41

si vous utilisez une base de données en mémoire, vos données seront rejetées lorsque vous fermez la connexion.

peut-être un peu une affaire de bord, mais ça m'a pris par surprise.

6
répondu David Sykes 2012-02-07 10:21:55

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 de Documentation

Persistance De La Connexion De Base De Données:

puisque getabledatabase() et getReadableDatabase() coûtent cher à appel lorsque la base de données est fermée, vous devez laisser votre base de données connexion ouverte aussi longtemps que vous avez besoin d'y accéder. Généralement, il est optimal de fermer la base de données dans l'onDestroy() de la vocation de l'Activité.

    @Override
    protected void onDestroy() {
        mDbHelper.close();
        super.onDestroy();
    }
2
répondu Seagull 2017-05-19 06:58:28

comme ajout, l'ouverture et la fermeture d'une connexion si fréquemment pourrait éventuellement vous faire éprouver des exceptions SQLite notoires, si vous accédez à la base de données à partir de plusieurs threads.

voir, si vous accédez à db à partir de plusieurs threads, même sur une seule connexion et puisque ces opérations ne sont pas atomiques, alors vous pouvez essayer de mettre à jour db qui a été fermé juste avant par un autre thread.

1
répondu zgulser 2016-01-06 07:45:52