Bonjour,
Normalement pour les objets gérés par le CLR, le CLR gère l'allocation de mémoire pour ces objets .
Mais pour les objets non gérés par le CLR (ex: connexion Bases de donénes, connexion réseau ou COM), il est nécessaire de leur allouer manuellement de la mémoire.
Cependant, pour créer une nouvelle connexion à une base de données, on peut créer une classe connexion dans laquelle on crée un variable qui contiendra la chaine de connexion.
Puis on pourra ensuite instancier cette classe.
La connexion devient-elle alors gérée par le CLR ou pas ?
Car je n'ai pas constaté que j'alloue moi même de la mêmoire pour gérer une connexion de base de données.
Par ailleurs, concernant le processus de destruction d'un objet , je lis que le garbage collector procède en plusieurs étapes:
1-les objets situés sur le heap sont marqués morts "jusqu'à preuve du contraire"
2-les objets références sont marqués vivants
3-les objets non vivants sont déplacés dans la zone nommée "freachabale queue".
4-on défragmente le heap en faisant migrer les objets qui s'y trouvent vers le bas du heap
5-on met à jour les pointeurs vers les objets du heap puisqu'ils ont été déplacés
6-le processus de finalization commence
Pour ce qui est de l'étape n°3, Il est ajouté que le garbage collector vérifie que les objets morts aient une méthode destructor.
Je ne comprends pourquoi existe cette vérification puisque normalement les objets que gère le garbage collector possèdent tous une méthode destructor.
Seuls les objets non gérés par le garbage collector n'en n'ont pas et il faut leur en ajouter un.
Autre question, la freachable queue est-elle située sur le heap ou pas?
Par ailleurs, les méthodes Collect(), WaitForPendingFinalizers, SupressFinalize(), ReRegisterForFinalize(), AddMemoryPressure(), RemoveMemoryPressure() s'appliquent normalement aux objets qui sont gérés par le garbage collector mais qui nécessitent une intervention particulière.
Cependant ces méthodes s'appliquent elles également aux objets qui ne sont pas gérés par le Garbage collector et pour lesquels on souhaite executer le processus de nettoyage de la mémoire , tout comme pour les autres objets gérés automatiquement par le Garbage Collector.
Concernant les méthodes AddMemoryPressure et RemoveMemoryPressure, s'appliquent elles bien aux objets qui ne sont pas gérés par le Garbage collector, pour leur allouer ou de la mémoire manuellement ou en récupérer.
Merci beaucoup de votre réponse sur tous ces points.
Cordialement
curieuse_prog
Partager