6 votes

Est-il acceptable de garder une connexion à la base de données ouverte pendant toute la durée de vie de la page ?

Tout le monde sait qu'il faut fermer une connexion immédiatement après l'avoir utilisée.

En raison d'un défaut de conception de mon modèle d'objet de domaine, j'ai dû laisser la connexion ouverte pendant tout le cycle de vie de la page. Essentiellement, j'ai une propriété Just In Time qui ouvre une connexion lors du premier appel, puis lors de Page.Unload (..), elle vérifie si une connexion à la base de données a déjà été ouverte, et la ferme si c'est le cas. Comme cela ne prend qu'une seconde, j'ai pensé que ce n'était pas très différent que de la fermer immédiatement.

Est-ce que ça va ? Ou faut-il encore le fermer immédiatement après chaque utilisation ?

Merci d'avance.

7voto

Scott Ivey Points 19577

Non, ça ne va pas.

Si votre application doit un jour se développer ou évoluer, vous devrez résoudre ce problème. En maintenant cette connexion ouverte, vous réduisez votre capacité à évoluer. N'oubliez pas que les connexions ouvertes occupent de la mémoire sur le serveur, de la mémoire sur le client, maintiennent des verrous ouverts, etc.

3voto

Bruno Shine Points 944

Que se passe-t-il si votre page se plante avant d'atteindre l'événement Page.Unload ? Vous aurez une connexion ouverte. Pour moi, il est préférable de toujours fermer la connexion dès que possible.

2voto

Eduardo Molteni Points 23135

Oui, c'est bon.

Fermer la connexion dès que possible est une bonne pratique pour éviter les connexions orphelines ouvertes, mais si vous êtes sûr que la connexion est fermée, il n'y a rien de mal à cela.

2voto

liggett78 Points 8268

Toute application ASP.NET décente utilise aujourd'hui la mise en commun des connexions, et une mise en commun est essentiellement un ensemble de connexions ouvertes. Dans votre cas, cela signifie que la connexion à laquelle vous vous accrochez est "occupée" et ne peut pas être utilisée pour répondre à d'autres demandes.

D'après ce que je vois, il s'agirait d'un problème d'évolutivité qui dépendrait du temps que votre page doit passer à travailler/rendre. Si vous n'attendez que 100 utilisateurs, comme vous le dites, alors ce n'est probablement pas un problème - à moins que ce ne soit 100 req/sec bien sûr.

D'un point de vue technologique, tout va bien. Autant que je m'en souvienne, la plupart des applications client-serveur (web et non-web), y compris le code ASP classique, fonctionnaient de cette manière, c'est-à-dire que vous déclariez une connexion pour toute la page et que vous travailliez avec elle.

2voto

MusiGenesis Points 49273

Ce n'est pas l'idéal, mais je ne réécrirais pas ma candidature pour autant. À moins que votre page n'effectue une grande quantité de travail fastidieux dans diverses méthodes, l'ensemble du cycle de vie de la page devrait s'exécuter rapidement. Dans la pratique, cela peut simplement signifier que votre objet de connexion est ouvert quelques millisecondes de plus qu'il ne l'aurait été autrement. Cela peut être significatif dans certains scénarios, mais cela ne semble pas être le cas dans votre cas.

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