Bonjour.
QQn sait qu'elle est la différence entre Dipose() et Close() et dans quels cas utiliser l'un et pas l'autre ?
Merci.
Bonjour.
QQn sait qu'elle est la différence entre Dipose() et Close() et dans quels cas utiliser l'un et pas l'autre ?
Merci.
Close te permet de fermer une fenêtre mis en la laissant en mémoire. Tu pourras alors rappeller ta_fenetre.Show().
Dispose libère les ressources associées à ta fenêtre donc là, tu ne pourras pas faire ton .Show.
Je te remercie Morpheus.
Dans ce cas, selon toi, il vaut mieux faire un close et ainsi pouvoir faire un show plus loin ou bien faire un dispose et libérer les ressources mais devoir faire un New avant de faire le show ?
Il a toujours été affirmé que pour améliorer les performances des applications .NET, il faut faire appel à Dispose lorsque celui-ci est disponible![]()
Cool parfait!
Merci encore pour ta réponse et ta rapidité...
Non. Tu devais penser à Hide() en disant cela car c'est Hide qui cache la fenêtre.Envoyé par Morpheus
Close ferme ta fenêtre et librère la mémoire.
Close appelle Dispose en interne (si mes souvenirs sont exacts)
Tout comme Dispose.
Pour une Form, les deux font la même chose.
si tu fais
Tu auras un beau carton
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 FormX f = new FormX(); f.Close(); // ou f.Dispose(); f.Show(); // Tu auras une belle ObjectDisposedException![]()
A une nuance près pour la fermeture:
http://blog.developpez.com/index.php...&c=1&tb=1&pb=1
quoi je fais de le pub pour mon blog?![]()
De manière générale, quand il y a une méthode Close et une méthode Dispose, il est quasiment garanti que Dispose appelle Close (ça devrait toujours être le cas, vu que Dispose est là pour tout boucler et faire le ménage, ce qui inclut de fermer tout ce qui est fermable :). Par contre, il n'y a aucune garantie sur ce que fait Close.
Le principe de base est toujours le même : s'il y a une méthode Dispose, on l'appelle. À partir du moment où ce principe est respecté, il y a des Close dont on peut se passer, quoique ça ne coûte pas plus cher de les appeler quand même (on n'est pas à une ligne près :)
Dispose a plutôt sa place dans un bloc Try/Finally (ou plus simplement avec using et en convertissant les VBeux aux C# :), tandis que Close peut très bien se contenter d'être dans le flux normal du programme. Si le bloc environnant est garanti de passer par Dispose au final, les ressources sont toujours libérées, c'est sûr. Avec Close seul, même dans un Try/Finally, c'est pas forcément vrai.
Après les petits tests que je viens de finir je dirais même:
la collection se fesant plus rapidement encore... je testerais ca correctement demain car il y a aussi un débat sur = null
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 object.Close object.Dispose object = Nothing 'ou = null; si tu préfère maniak :)![]()
Pas vraiment un débat, juste une histoire de références.Envoyé par Piotrek
Le garbage collector ne vire que les variables qui ne sont plus référencées. Donc si une classe a un champ qui contient pas mal de ressources (managées ou non, ça sort du cadre de Dispose là), appeler Dispose dessus est bien, ça dégage les ressources non-managées, mais les ressources managées ne seront nettoyées que quand l'instance de la classe elle-même ne sera plus référencée.
Re-donc, si un champ privé contient pas mal de données mais n'est utilisé que pendant une partie de la vie de l'objet qui le contient, le mettre à null permet au GC de passer (éventuellement) dessus quand il en aura l'occasion.
Dans le cas des variables locales ça ne sert à rien vu qu'elles ne sont plus référencées dès qu'on sort du bloc.
Après, on peut souligner que si une classe contient un champ privé qui ne sert que pendant une partie de sa vie, ça indique peut-être le besoin de créer une nouvelle classe :)
Je ne suis pas un expert, je veux juste partager mes remarques d'apres mon experience
Hide() permet de cacher la fenetre comme il est dit plus haut
Dispose() libere les ressources liées à la fenetre qui l'appelle.
Close() libere toutes les ressources qu'elles soient liées aux fenetres filles qu'aux fentres parent.
petite correction
C'est Close qui appele dispose,
J'arrive après la bataille, mais je me souviens d'une de mes premières régies. Le client disait :
Là où tu fais "monObjet.Open()" tu fais plus loin un Close() et pour tout Object monObjet = New Object() tu fais un Dispose() (s'il est disposable ;-p)...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager