51 votes

C #: les variables d'objet doivent-elles être affectées à null?

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?

44voto

Daniel DiPaolo Points 24085

Non, et qui pourrait en fait être dangereux et bug-ventral (envisager la possibilité que quelqu'un pourrait essayer de l'utiliser plus tard, ne réalisant pas qu'il avait été défini à null). Seulement mettre quelque chose pour la valeur null si il y a une raison logique de le mettre à null.

29voto

VinayC Points 23947

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.

29voto

Kobi Points 65357

Si vous éteignez votre voiture avant de le pousser vers le lac?
Pas de. C'est une erreur commune, mais il ne fait aucune différence. Vous n'êtes pas le réglage de l' objet à null, juste une référence à l'objet est toujours en mémoire, et doivent encore être collectées par le garbage collector.

21voto

user1739635 Points 91

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.

15voto

Jon Hanna Points 40291

L'attribution à la valeur null est généralement une mauvaise idée:

  1. Sur le plan conceptuel, c'est juste inutile.
  2. 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.
  3. 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:

  1. 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.
  2. 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X