46 votes

Les membres statiques reçoivent-ils parfois des ordures ménagères ?

Les variables membres statiques sont-elles jamais ramassées ?

Par exemple, utilisons la classe suivante.

 public class HasStatic {
    private static List<string> shared = new List<string>();

}

Et supposons qu'il soit utilisé comme ceci :

 //Startup
{
HasStatic a = new HasStatic();
HasStatic b = new HasStatic();
HasStatic c = new HasStatic();
HasStatic d = new HasStatic();
//Something
}
//Other code
//Things deep GC somewhere in here
HasStatic e = new HasStatic();

Lorsque a , b , c et d sont ramassés, le membre statique shared est-il collecté en tant que bien? e pourrait-il éventuellement obtenir une nouvelle instance de shared ?

30voto

Eric Lippert Points 300275

La seule chose que j'ajouterais à l'excellente réponse de Jon est que CLR 4 prend en charge les "assemblages à collectionner". Si vous générez dynamiquement un assembly collectable, la statique de ses types disparaît lorsque l'assembly est récupéré par la mémoire.

Consultez cet article msdn pour un bref aperçu de la fonctionnalité :

http://msdn.microsoft.com/en-us/library/dd554932%28VS.100%29.aspx

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