Dupliqué possible: strong>
Utilisation correcte de l'interface Idisposable P> blockQuote>L'article "Interface Idisposable" raconte: p>
L'utilisation principale de cette interface consiste à libérer des ressources non gérées p> blockQuote>
pourquoi? strong> Pourquoi seulement non géré? P> Tout ma vie, je pensais que son utilisation primiraly est de libérer toutes les ressources: gérées (connexions à DBS, proxies de services, etc.) et non gérées (si elles sont utilisées en application). P>
P.s. P>
Je crois qu'il y a déjà des questions sur ce sujet, mais je ne peux pas les trouver. P>
5 Réponses :
Si vous lisez plus loin, il y a une explication: p>
Le collecteur des ordures automatiquement libère la mémoire allouée à un objet géré lorsque cet objet n'est pas utilisé plus longtemps. Cependant, ce n'est pas possible de prédire quand des ordures la collecte se produira. Par ailleurs, Le collecteur des ordures n'a aucune connaissance des ressources non gérées telles que la fenêtre poignées, ou ouvrir des fichiers et des flux. p> blockQuote>
Le collecteur des ordures prend soin des ressources gérées. C'est pourquoi ils sont
géré code>. P>
En outre, la ressource de connexion dans votre exemple n'est pas gérée des ressources. Les classes de connexion .NET enveloppent des ressources non gérées. P>
Les connexions sous-jacentes aux DB ne sont pas gérées, de même que les poignées de fichier et un certain nombre d'autres objets O / S de bas niveau. Ils sont non gérés. La mise en œuvre d'une interface code> Idisposable ID> implique que vous ne comptez pas uniquement sur le collecteur des ordures pour libérer ces ressources; Mais vous fermez ces ressources à l'aide de l'API de faible niveau que vous avez disponible. p>
Aussi, je pense que Eric Lippert's Réponse (2e baisse) à une question similaire est une très bonne explication sur la raison pour laquelle vous utiliseriez Idisposable code>. P>
Néanmoins, la question est fermée comme dupliquée, je veux accepter cette réponse. David, vous êtes la seule personne qui a attiré mon attention que la connexion à DB est en fait une ressource non gérée ... cela a du sens. Je savais que j'ai toujours besoin de le fermer (ou de disposer), mais j'ai toujours pensé qu'ils sont nommés «géré». Merci!
iDisposable.Dispose () code> est responsable de deux choses: p>
Dispose () code> autre
Idisposable code> s appartenant à l'objet fort> li>
ul>
Votre réponse à p>
La durée de vie des ressources gérées est contrôlée par le collecteur des ordures. Qui est l'une des raisons jadis que vous utilisez c # ou java. P>
au lieu de "ressources non gérées", pensez "responsabilités". Lorsqu'un objet est décrit comme contenant des "ressources non embliquées", ce que cela signifie vraiment: p>
La situation la plus courante dans laquelle une classe aura des responsabilités de nettoyage est lorsque une autre entité a été invitée à réserver quelque chose (que ce soit un fichier, une poignée GDI, une serrure, une machine à sous réseau, un bloc de mémoire, une chaîne de communication ou autre) jusqu'à ce que remarquer. Si rien ne dit cette autre entité que la chose qu'il est réservée n'est plus nécessaire, cela ne laissera jamais rien d'autre à l'utiliser. P>
Si un objet qui a une responsabilité importante d'effectuer certaines mesures est balayé par le collecteur des ordures avant de remplir sa responsabilité, l'action ne sera jamais effectuée. Il y a deux façons que cela puisse être empêché: p>
Les objets fournis à la deuxième approche de nettoyage sont appelés "ressources gérées". P>
Les ressources gérés sont nettoyées automatiquement par le collecteur des ordures. L'idiposable fournit une manière standard pour que les ressources non gérées soient libérées.
Essayez ici - Beaucoup de bonnes informations: Stackoverflow .com / questions / 538060 / ...