Est-il possible que le modificateur readonly influence le travail du récupérateur de place? Pour le type de valeur, pour le type de référence?Est-ce que l'influence du modificateur readonly sur Garbage collector?
Répondre
Je ne vois pas pourquoi il devrait influencer le GC avec une utilisation normale. C'est juste un champ. Et le GC suit simplement les champs de type référence (ou les références contenues dans les champs struct).
Vous pourriez être en mesure de construire des scénarios artificiels où il influence le GC (en abusant peut-être des copies défensives du champ en lecture seule), mais cela ne se produira pas avec un usage normal.
Et bien sûr, vous ne pouvez pas définir le champ sur null dans une méthode comme Dispose
, ce qui peut être utile si vous voulez avoir des objets propriétaires coûteux prêts pour GC alors que quelque chose contient une référence à l'objet conteneur.
échantillon mal d'un changement de comportement programme en raison de readonly
Ce programme montre que tout modification d'un champ de ne pas en lecture seule à lecture seule peut empêcher la collecte d'un objet avec le code autrement identique. Il abuse qu'un champ readonly soit copié sur l'invocation de la méthode pour définir le champ Obj null dans la structure inscriptible et conserver la référence dans la structure readonly. Comme il empêche la référence de devenir nulle, elle empêche la collecte de l'objet.
Mais bien sûr, cela n'influence pas le GC lui-même. Mais à la place, il abuse de la sémantique de readonly pour créer un graphe d'objet différent avec readonly que sans. Donc, la déclaration de Jared est toujours complètement vraie.
struct EvilStruct
{
public readonly object Obj;
public void SetToNull()
{
this=new EvilStruct();
}
public EvilStruct(object obj)
{
Obj=obj;
}
}
readonly EvilStruct s1=new EvilStruct(new object());
EvilStruct s2=new EvilStruct(new object());
void Main()
{
s1.SetToNull();
s2.SetToNull();
s1.Obj.Dump();//An instance of System.Object
s2.Obj.Dump();//null
//now s1.Obj can't be collected, but what was once in s2.Obj can
}
Ce n'est pas le cas. Readonly modifie le champ lui-même et non ce qu'il pointe vers. L'objet sera collecté à un moment donné lorsqu'il n'est plus enraciné. –
Trouvé un exemple d'un programme dans lequel readonly empêche la collecte d'un objet. – CodesInChaos
Au mieux, ce programme montre que vous n'avez pas pris la peine de le compiler, puisqu'il n'y a pas de méthode 'Dump' dans' Object'. En outre, vous êtes la fonction 'Main' n'est pas statique, et si c'était le cas, vous ne pouvez pas accéder à' s1' et 's2'. –
Non, ce n'est pas le cas. Le GC fonctionne en récupérant de la mémoire pour les objets qui ne sont pas accessibles à partir de l'un des objets enracinés. Le modificateur readonly n'a aucun impact sur ce processus. Deux graphes d'objets identiques à l'exception d'un ayant quelques champs en lecture seule seraient collectés de la même manière.
readonly
est une fonctionnalité C#. Le GC est une fonctionnalité CLI. Par conséquent, il simplement ne peut pas influencer le GC du tout.
- 1. Xcode: Garbage Collector Setting
- 2. Eclipse: bouton Garbage Collector
- 3. garbage collector .NET
- 4. android garbage collector lingo
- 5. .NET garbage collector mystery
- 6. Garbage Collector Flash Player
- 7. Garbage Collector asp.net
- 8. Contrôle du garbage collector de Lua5.1
- 9. Calmer un garbage collector excité
- 10. alloca et ObjectiveC Garbage Collector
- 11. C# garbage collector référence croisée
- 12. Garbage Collector et Core Foundation
- 13. Garbage Collector et Core Graphics
- 14. Est-ce que Marshal.ReleaseComObject appelle le garbage collector?
- 15. Que signifie CMS par rapport au Garbage Collector de Java?
- 16. iPad - prend en charge Garbage Collector?
- 17. La vitesse d'allocation dépend-elle du garbage collector utilisé?
- 18. Garbage collector et la méthode finalize()
- 19. Le garbage collector appelle-t-il Dispose()?
- 20. Crash de Webview avec Garbage Collector ON
- 21. Garbage Collector détruit les objets d'Interface Builder
- 22. Performance relative du garbage collector de Garbage First (G1) de Java?
- 23. Garbage collector qui fonctionnerait en dehors de mon application?
- 24. Comment faire mon code Haskell utiliser Laziness et Garbage collector
- 25. Exécuter garbage collector à partir de la ligne de commande?
- 26. Vérifiez si l'objet peut être récupéré par le garbage collector
- 27. Comment arrêter le garbage collector android? C'est possible?
- 28. Comment puis-je protéger un objet de journalisation du garbage collector dans un processus de multitraitement?
- 29. Est-ce que iPhone OS 3.0 a un vrai garbage collector?
- 30. Garbage collection sur une variable locale
Copie possible de http://stackoverflow.com/questions/1152573/does-readonly-c-reduce-memory-usage –