En C #, est-il nécessaire d’affecter une variable d’objet à null
si vous avez fini de l’utiliser, même si elle sortira quand même de sa portée?
Réponses
Trop de publicités?Ce qui compte le plus de l'OMI est l'appel de la Jeter sur les objets qui implémentent IDisposable.
En dehors de cela, affectation de la valeur null pour faire référence à des variables signifie simplement que vous êtes explicitement indiquant la fin de la portée de la plupart de temps, c'est juste quelques instructions au début (par exemple, des variables locales dans le corps de la méthode) - avec l'ère de compilateur/optimisations JIT, son tout à fait possible que l'exécution serait de faire la même chose, de sorte que vous n'avez vraiment;t obtenir quelque chose hors de lui. Dans quelques cas, tels que les variables statiques etc (dont la portée est le niveau d'application), vous devez affecter la variable à null si vous avez terminé de l'utiliser, de sorte que l'objet obtiendrez d'ordures collectées.
La plupart de ces réponses ont le droit de réponse, mais pour les mauvaises raisons.
Si c'est une variable locale, la variable va tomber la pile à la fin de la méthode et, par conséquent, l'objet qu'il pointait à aura un de moins de référence. Si cette variable est la seule référence à l'objet, l'objet est disponible pour le GC.
Si vous définissez la variable à null (et bon nombre des personnes qui ont appris à le faire à la fin de la méthode), alors vous pouvez réellement liquidation de proroger le délai de l'objet reste en mémoire parce que le CLR croire que l'objet ne peut pas être collectées jusqu'à la fin de la méthode, car il y voit un code de référence de l'objet de façon, là-bas. Toutefois, si vous omettez le paramètre de la valeur null, le CLR peut déterminer que plus d'appels de l'objet apparaissent après un certain point dans votre code, et, même si la méthode n'est pas encore terminée, le GC peut collecter de l'objet.
L'attribution à la valeur null est généralement une mauvaise idée:
- Sur le plan conceptuel, c'est juste inutile.
- Avec de nombreuses variables, vous pourriez avoir assez de missions supplémentaires à null que vous augmenter sensiblement la taille de la méthode. Plus le code source pour que quelque chose est, plus l'effort mental est pris pour le lire (même si beaucoup de choses qui peuvent être filtrés) et plus il est facile de repérer un bug. Rendre le code plus détaillé que ce qui est nécessaire uniquement lorsque cela rend plus compréhensible.
- Il est possible que votre null cession ne sera pas optimisé loin. Dans ce cas, il est possible que le code compilé de ne pas faire la vraie libération de la mémoire jusqu'à ce qu'il atteigne effectivement que nulle cession, alors que dans la plupart des cas, une fois que la variable est d'aller à ne rien faire d'autre que de tomber hors de portée (et parfois même avant), il peut être libéré. Vous pouvez donc avoir une très mineur impact sur les performances.
La seule fois où je voudrais assigner quelque chose à null pour "effacer" une variable qui n'est plus utilisé, plutôt que null est en fait une valeur que j'ai explicitement à attribuer, dans l'un des deux cas de figure possibles:
- Il est membre de l'un peut être de longue durée de l'objet, ne peuvent plus être utilisées par l'objet, et est d'une taille considérable. Ici, l'attribution à la valeur null est une optimisation.
- Il est membre de l'un peut être de longue durée de l'objet, ne peuvent plus être utilisées par l'objet, et a donc été éliminé à la libération de ses ressources. Ici, l'attribution à la valeur null est une question de sécurité, car il peut être plus facile de trouver un cas où l'on utilise accidentellement un objet null où l'on utilise accidentellement un objet supprimé.
Aucun de ces cas s'appliquent à des variables locales, uniquement pour les membres, et les deux sont rares.