2010-07-01 8 views
2

Il est écrit en lien http://msdn.microsoft.com/en-us/magazine/bb985010.aspxgarbage collector .NET

« Lorsqu'une application crée un nouvel objet, le nouvel opérateur alloue la mémoire du tas. Si le type de l'objet contient une méthode Finaliser, puis un pointeur vers la l'objet est placé dans la file d'attente de finalisation. "

Quelqu'un peut-il s'il vous plaît me préciser

1) Cela signifie, que lorsque nous utilisons explicitement Finaliser (en utilisant destructor) objet puis ira à finaliser la file d'attente.

2) Chaque classe .NET en utilisant implicitement finalize (en utilisant destructor) de sorte que tous les objets de la bibliothèque de classes .net iront à finaliser la file d'attente.

3) ce que notre classe personnalisée comme Classs A { } classe A obj ira à finaliser ou non, cosidering les deux cas (destructor explicite/implicite)

4) Si ci-dessus classe est écrite dans le code non géré ce qui va happen.It ira pour finaliser la file d'attente ou non

Merci

Répondre

3

1) Oui, des objets qui fournissent finaliser() - méthode (le 'destructor' en C#) sont ajoutés le Finalize -queue.

2) Non, la plupart des classes .NET n'ont pas Finalizer. Lorsque vous n'en implémentez pas un dans votre classe, les instances de cette classe ne seront pas ajoutées à la file d'attente de finalisation.

3) Votre classe A ira uniquement dans la file d'attente finalize lorsqu'elle sera implémentée en tant que Finalize-Method. (Le 'destructeur' en C#

4) Les classes non gérées ne sont pas gérées. Le ne sera pas récupéré par les ordures ni ajouté à la file d'attente finalize.

Quelques remarques générales. Le 'destructeur' en C# n'est pas un destructeur au sens C++.

  • Vous n'avez aucun bénéficiaire quand il sera appelé, etc. Son sucre syntaxique pour l'écriture d'une méthode de finalisation.
  • Évitez les finaliseurs, car ils ajoutent des frais supplémentaires. D'abord, l'objet doit être ajouté à la file d'attente finalisée. Ensuite, il doit être ramassé deux fois. La première fois à détecter qu'il n'est plus utilisé. La deuxième fois que la méthode de finalisation est terminée.
  • Utilisez l'interface IDisposable pour gérer et libérer des ressources. Ressources particulièrement indigènes.
  • Utilisez le finaliseur uniquement pour le nettoyage d'urgence des ressources natives. Fondamentalement, vous vérifiez si l'objet a été disposé correctement (IDisposable) -interface. Sinon, vous faites le travail dans le finaliseur pour éviter d'autres fuites de ressources.
+0

+1, Quelques points très importants! – CharithJ

Questions connexes