List.Capacity solo preasigna memoria para que la lista pueda crecer hasta el límite de capacidad sin incurrir en asignaciones de memoria adicionales y fragmentación de pila asociada. Establecer List.Capacity en 1000 no hace que 1000 entradas sean accesibles. List.Count indica el final del contenido de la lista real. List.Insert() no se puede usar para insertar elementos más allá de List.Count.
Su solución alternativa de crear una matriz de 1000 elementos y luego convertirla en una lista es simplemente un atajo para llamar a List.Add() 1000 veces para asignar espacios vacíos en la lista (presione List.Count a 1000). Llamar List.Add() 1000 veces es más eficiente desde el punto de vista de la memoria, ya que con la técnica de matriz habrá 2 copias de la lista en la memoria (1 para la matriz y 1 para la lista).
Ha descartado la sugerencia de utilizar un Dictionary<int, sometype>
para una matriz dispersa porque usaría más memoria que una matriz escasamente poblada. Eso depende de cuán escasos sean sus datos. Si solo tiene 100 elementos en un rango de índice de 0..1000, tiene una densidad del 10%. También puede llamar a ese 90% de memoria desperdiciada.
Es casi seguro que un diccionario será más eficiente en cuanto a la memoria para una matriz dispersa de baja densidad que la asignación de una matriz de 1000 elementos, pero solo utilizando 100 de las ranuras. No conozco los detalles de la implementación del diccionario o el uso de la memoria, pero probablemente sea una suposición segura que si la densidad de su matriz dispersa es 50% o mayor, usar una matriz en lugar de un diccionario gana para la memoria y la velocidad.
No se puede hacer, use el método Add(). –
Si se trata de una lista dispersa (como 10,20 elementos dispersos en el rango 1000), en realidad podría estar buscando un 'Diccionario' en lugar de una Lista. –
@ssg Sí, es una lista dispersa. Usar Dictionary es una buena sugerencia. Pero luego estaría usando más espacio. ¿Algo más simple? – user1041086