1 votes

Comprendre la mémoire

En C#, l'opération suivante permet-elle d'économiser de la mémoire ?

private List<byte[]> _stream;
public object Stream
{
    get
    {
        if (_stream == null)
        {
            _stream = new List<byte[]>();
        }
        return _stream;
    }
}

Edit : Désolé, je suppose que j'aurais dû être plus précis.

En particulier en utilisant "objet" au lieu de "liste"... J'ai pensé que ça serait un indice parce que c'est une chose bizarre à faire.

0voto

helios Points 8379

Que sont réellement les objets

Je suggère de considérer les objets comme des structures... et les références d'objets comme des pointeurs vers cette structure.

Si vous instanciez un objet, vous réservez de la mémoire pour un "struct" avec tous ses champs (et une référence à la classe qu'il implémente), plus toute la mémoire réservée par le constructeur (autres objets, tableaux, etc...).

Dans List, vous réservez de la mémoire pour le maintien de l'état (je ne sais pas comment c'est implémenté en C#) et le tableau interne initial, peut-être de dix références. Donc... si vous comptez, c'est quelque chose comme (en supposant un runtime 32 bits, je ne suis pas un spécialiste de .net) :

  • pointeur vers la classe : 4 octets
  • pointeur vers le tableau : 4 octets
  • de Capacité initiale références : 40 octets

Donc, selon mon estimation, il s'agit d'environ 48 octets. Mais cela dépend de l'implémentation.

Comme le dit SoloBold : la plupart du temps, ce n'est pas digne.

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