2012-01-22 16 views
7

Después de crear una lista de instancias (ignorando así la sobrecarga asociada a la creación de una lista), ¿cuál es el costo de memoria de agregar el mismo objeto a una lista una y otra vez? Creo que lo siguiente es simplemente agregar el mismo puntero a la memoria en la lista una y otra vez, y por lo tanto, esta lista en realidad no ocupa mucha memoria. ¿Alguien puede confirmar que ese es el caso?Lista con objetos repetidos - ¿Cuánto cuesta la memoria?

List<newType> list = new List<newType>(); 

newType example = new newType(); 

for (int i = 0; i < 10000; i++) 
{ 
    list.Add(example); 
} 

(Vamos a suponer que un nuevo newType ocupa una cantidad considerable de más memoria de la que hace un puntero)

EDITAR

newType es una clase. Perdón por no aclarar eso.

Respuesta

5

Esto depende de si newType es class (un tipo de referencia) o struct (un tipo de valor). Su explicación es correcta para los tipos de referencia, pero los tipos de valor se copian en su totalidad, por lo que la lista crecerá según el tamaño de su tipo de valor a medida que agregue elementos a la lista. También tenga en cuenta que el crecimiento de la lista no será uniforme con las adiciones de elementos, porque internamente List asigna memoria en fragmentos, esperando acomodar más elementos.

+0

Por favor, vea mi edición. ¡Gracias! – carlbenson

+0

@CarlBenson Entonces tiene razón; consulte la excelente explicación de Andrew Hare sobre lo que está sucediendo. – dasblinkenlight

2

Habrá poca sobrecarga, ya que almacenará múltiples referencias al mismo objeto. La lista solo almacena las referencias a los objetos que agrega, los objetos mismos se asignan en otro lugar. Dado que está agregando el mismo objeto varias veces, todos apuntarán al mismo objeto en el montón y la única sobrecarga serán las referencias mismas.

Cuestiones relacionadas