Qu'entend-on par “gestion” vs “non géré” ressources .NET?
Ce que l'on entend par les termes de ressources gérées et non gérées ressource .NET? Comment font-ils pour venir dans l'image?
- Double Possible de Ce qui est réussi/non code en C#?
Vous devez vous connecter pour publier un commentaire.
Le terme "ressource non managée" est généralement utilisé pour décrire quelque chose pas directement sous le contrôle du garbage collector. Par exemple, si vous ouvrez une connexion à un serveur de base de données cela permettra d'utiliser les ressources sur le serveur (pour le maintien de la connexion) et éventuellement d'autres non-.net ressources sur la machine du client, si le fournisseur n'est pas entièrement écrite en code managé.
C'est pourquoi, quelque chose comme une connexion de base de données, il est recommandé que vous écrivez votre code ainsi:
Comme cela garantit que
.Dispose()
est appelée sur l'objet de connexion, s'assurer que toutes les ressources non managées sont nettoyées.Ressources gérées sont ceux qui sont purs .NET code et géré par le moteur d'exécution et sont sous son contrôle direct.
Ressources non gérées sont celles qui ne le sont pas. Les descripteurs de fichiers, épinglé mémoire, les objets COM, les connexions de base de données etc.
Dans le Q&Un Ce sont des ressources non managées?1, Bruce Bois posté le suivant:
Commentaire: Vous ne pouvez pas être la tenue d'une ressource non managée directement. Toutefois, vous pouvez peut-être la tenue d'une ressource non managée indirectement via un gérés "classe wrapper" comme Système.IO.FileStream. Une telle classe wrapper couramment implémente IDisposable (soit directement ou par l'intermédiaire de l'héritage).
Commentaire: Par la mise en œuvre de
IDisposable
et ainsi fournir unDispose()
méthode, vous permettant à un utilisateur de votre classe à la libération dans un déterministe de la mode de toutes les ressources non managées, qui sont détenues par une instance de votre classe.1 Lien initialement partagée dans Sachin Shanbhag réponse. Le matériel cité daté 2005-11-17. Notez que j'ai légèrement corrigés de la cité contenu.
La différence fondamentale entre les administrés et non administrés de ressources, c'est que l'
garbage collector connaît toutes les ressources gérées, à un certain point dans le temps
le GC va venir le long et le nettoyage de la mémoire et des ressources associées
avec un objet géré. Le GC ne sait pas sur des ressources non managées, tels
que des fichiers, des flux et des poignées, donc, si vous ne nettoyez pas leur explicitement dans
votre code puis vous allez vous retrouver avec des fuites de mémoire et de ressources verrouillées.
Pour plus de détails - http://bytes.com/topic/c-sharp/answers/276059-what-unmanaged-resources
Géré les ressources sont des ressources qui peuvent être libérées par le garbage collector et des ressources non managées ne peut pas être libéré par le garbage collector pour cet effet destructeur est nécessaire.