Est-il acceptable de laisser toujours une connexion de base de données open?
Je suis en train de travailler sur un seul bureau de l'utilisateur de la base de données de l'application genre de chose dans mon temps libre, et je suis toujours des doutes sur les choix de conception, je suis en train de faire. Maintenant, comme il est, à chaque fois que l'utilisateur veut interagir avec la base de données (qui est une base de données SQLite, donc généralement qu'un utilisateur voit jamais à la fois), l'application crée une nouvelle connexion, fait tout ce qu'il doit faire, et puis ferme la connexion. Thereforee, au cours d'une exécution de l'application, de nombreuses connexions sont créées et éliminés.
Est-ce la "meilleure" façon d'aller à ce sujet, ou devrait l'application, ouvrez la connexion au démarrage et ne ferment lorsque l'application se ferme? Quels sont les avantages/inconvénients de chaque méthode?
- Recherche sur Stackoverflow.com. Cette question a été posée à plusieurs reprises il.
- Et chaque question posée semble avoir différents, souvent légèrement (ou totalement) en désaccord réponses.
Vous devez vous connecter pour publier un commentaire.
Je dirais que c'est bien dans ce cas, puisqu'il n'y aura jamais qu'un seul utilisateur et la base de données est hébergé sur la même machine (plus probablement dans le même espace de mémoire, je pense que SQLite seulement la charge de la DLL avec la principale de l'application) que l'application. Constamment à l'ouverture et à la fermeture de la connexion n'est pas nécessaire.
Une possible exception peut-être si vous avez besoin d'avoir plusieurs threads de votre application d'accéder à la base de données en même temps. Ensuite, vous pouvez soit la force d'attendre et de partager une connexion unique de l'objet, OU vous pouvez essayer de créer de nouvelles connexions pour les différents threads. Je n'ai jamais réellement essayé ceci dans SQLite. C'est une situation où la fermeture de la connexion principale et l'ouverture/fermeture des connexions multiples, peut-être mieux pour une application de bureau.
Pour les applications web, client/serveur ou des applications de bureau, je vous suggère de contre la sortie de connexions ouvertes.
Généralement la connexion est fermée après utilisation; de libérer de nouveau dans le pool de connexions disponibles. Si il y a un nombre élevé de transactions qui se déroulent sur un seul client, il est logique de tirer parti d'une seule connexion au lieu de créer plusieurs connexions à fermer immédiatement.
C'est un peu circonstancielle cependant, la meilleure pratique est de le fermer après utilisation, de sorte qu'il devient disponible dans le pool de nouveau.
Imaginez que vous avez 1000 utilisateurs d'accéder à votre application en même temps. Cela signifie que 1000 connexions ouvertes. Finalement, vous pourrait manquer de connexions. Afin de permettre à chaque utilisateur d'ouvrir une connexion, utiliser, et ensuite de le fermer pour que la connexion est gratuit à utiliser pour les autres.
De Plus Amples Éclaircissements
Imaginer le fait d'avoir plusieurs modules qui aurait besoin simultané de la même connexion? Image simultanément à l'exécution des contrôles avoir besoin de la connexion. Qu'est ce qu'il va faire? À l'échelle mondiale pour objet de connexion? L'utilisation d'un Singleton? Dites-moi si je me trompe
Lorsque vous traitez avec connexion à la base de mon polici est qu'dépend de ce que vous devez faire. Par exemple, si votre sont de chargement beaucoup de à la critique les données de mon adive serait pour encapsuler l'ensemble de vos opérations en une seule transaction, et avec une connexion qui doit être fermé après le transacction est obligé.
Maintenant, si vous avez besoin de faire beaucoup de requêtes de récupération de données, l'ouverture d'une fermeture d'une connexion pour chaque requête peut être assez cher, donc, laissant une connexion ouverte est mériteraient.
Le regroupement de connexion devrait font un point discutable. La piscine doit garder une connexion autour et ouverte pour que vous puissiez les réutiliser. Cela devrait vous permettre de suivre généralement les meilleures pratiques de l'utilisation des ressources pour la plus courte montant raisonnable, mais sans sacrifier les performances.
J'ai juste commencé à me poser cette même question. Comme vous, il suffit d'un seul app et je ne suis pas inquiet à propos de l'exécution de connexions.
Je n'ai toutefois un problème potentiel avec le laissant ouvert la base de données si: les transactions. Si vous faites un
BEGIN TRANSACTION
et il y a une erreur ou quelque chose d'autre se produit lorsque votre code n'a pas touché uneCOMMIT
ouROLLBACK
, puis vous quittez la transaction ouverte.Il pourrait donc être préférable de fermer uniquement dans le but de s'assurer que tout est rétabli après le travail est fait à la base de données.
Je ne sais vraiment pas combien de frais généraux, il est dans l'ouverture et la fermeture de la base de données du si. J'aimerais beaucoup connaître les pensées d'autres personnes sur ce.