|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Développeur informatique Inscription : avril 2010 Messages : 1 195 ![]() |
Bonjour,
C'est une question de syntaxe, j'aurais aimé comprendre l'utilisation de using. Imaginons un cas classique : Code C# :
Maintenant, j'ai aussi vu qu'on pouvait déclarer SQLiteConnection, Command et Reader dans des using() (je suis tombé sur des exemples). Cependant, les gens fermaient quand même la connexion juste avant de fermer le using. Ils ne le faisaient pas pour le reader par contre. Donc ma question, à quoi sert le using si on est obligé de faire Close() avant de le fermer quand même ? ça sert à quelque chose de fermer le reader si on l'a ouvert avec un using ? et tant qu'on y est, l'@ avant la commande SQL, ça sert à quoi ? Voilà, spam de questions :p
__________________
"Historiquement, techniquement, économiquement et moralement, Internet ne peut pas être contrôlé. Autant s’y faire." Laurent Chemla Je soutiens Diaspora*, le réseau social libre. Veillez à porter une attention toute particulière à l'orthographe... Blog collaboratif avec des amis : http://geexxx.fr Mon avatar a été fait par chiqitos, merci à lui ! |
||
|
00
|
|
|
#2 |
|
Membre Expert
![]() Guillaume Développeur .NET Inscription : juillet 2006 Messages : 854 ![]() |
Le using te permet de libérer les ressources utilisé
|
|
|
00
|
|
|
#3 |
![]() ![]() Développeur informatique Inscription : avril 2010 Messages : 1 195 ![]() |
Donc si ma méthode se termine la ligne en dessous de "connexion.close", il n'apportera rien ?
__________________
"Historiquement, techniquement, économiquement et moralement, Internet ne peut pas être contrôlé. Autant s’y faire." Laurent Chemla Je soutiens Diaspora*, le réseau social libre. Veillez à porter une attention toute particulière à l'orthographe... Blog collaboratif avec des amis : http://geexxx.fr Mon avatar a été fait par chiqitos, merci à lui ! |
|
00
|
|
|
#4 |
![]() ![]() |
L’instruction using te permet de libérer les ressources utilisées par l'objet sur lequel on l'applique en appelant implicitement la méthode Dispose de cet objet.
La méthode Dispose() appelle aussi implicitement la méthode Close de ta connexion donc ta dernière instruction connexion.close() ne sert à rien mais apporte plus de lisibilité.
__________________
Consultant .Net chez SoftFluent Découvrir notre produit CodeFluent Entities Adhérer à l'association Fier d'être développeur ![]() Les FAQs sur les technologies .Net voir ici Les cours et tutos sur les technologies .Net voir ici Les critiques sur les livres parlant des technologies .Net voir ici Pensez à la balise [CODE] Pensez au tag si votre problème est résolu
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() |
pour compléter un peu
les 3/4 des classes du framework sont géré par .net au niveau de la mémoire (vidage quand plus utilisé) certaines classes utilisent des objets de windows via des appels d'api par exemple, ou des objets qui ne sont pas codés en .net c'est le cas par exemple des images de System.Drawing, c'est windows qui les gèrent (gdi+ en fait), et aussi des connexions sql, des controles et forms etc... ces classent ont une méthode Dispose qui averti le truc externe qu'il faut vider la mémoire (car c'est hors de .net) using / end using ne peut etre utilisé qu'avec des variables de types IDisposable, ca permet d'être sûr que Dispose va être appelé en sortie de bloc using car si tu déclare ta connexion, que tu l'ouvres, que tu fais une requete qui plante, la suite du code n'est pas exécutée, soit ca va dans le catch si tu as un try catch, soit ca remonte à l'appelant dans ce cas ca ne passe pas sur connexion.close donc ta connexion ne sera pas fermée, et la mémoire par libérée rapidement using équivaut en celà à un try/finally, car même en cas d'erreur, le .dispose sera appelé sur la variable en sortie de bloc je confirme que .dispose sur une connexion appelle .close au passage (donc ferme la connexion) fermer un reader n'est pas utile si on ferme la connexion, car il sera fermé au passage Nb : si on oublie d'appeler Dispose sur un objet l'ayant, ce n'est pas forcément grave, .net à un mécanisme de destruction tardive quand même (voir GC et finalize pour plus d'infos) qui fait que Dispose sera appelé quand même néanmoins dans une boucle qui instancie un grand system.drawing.bitmap par exemple, ne pas faire le dispose fait que l'appli va crasher avec OutOfMemory |
|
|
10
|
Copyright © 2000-2013 - www.developpez.com