A List<int>
est couvert par une int[]
. Vous échouerez dès qu'un tableau de sauvegarde plus ne peut être attribuée - et garder à l'esprit que:
- Il y a une limite de 2 Go par objet dans le CLR même en 64 bits (EDIT: à partir de 4,5 .NET, cette peut être évité pour le CLR 64 bits - voir
<gcAllowVeryLargeObjects>
)
- La liste essayera d'allouer une matrice de support qui est plus grande que ce dont elle a besoin immédiatement, afin de répondre aux demandes
Add
ultérieures sans réaffectation.
- Lors de la réaffectation, il doit y avoir suffisamment de mémoire totale pour les anciens et nouveaux tableaux.
Réglage de la Capacity
à une valeur qui va mettre le tableau de support près de la limite théorique peut vous obtenir un point de coupure supérieure à la croissance naturelle, mais cette limite va certainement venir.
Je attendre une limite d'environ 2 éléments (536,870,912) - Je suis un peu surpris que vous ne l'avez pas réussi à aller au-delà 134.217.728. Combien de mémoire avez-vous réellement? Quelle version de .NET utilisez-vous, et sur quelle architecture? (Il est possible que la limite par objet soit de 1 Go pour un CLR 32 bits, je ne m'en souviens pas.)
Notez que même si la limite par objet n'était pas un problème, dès que vous obtenu au-dessus de 2 éléments que vous auriez des problèmes adressant ces éléments directement avec List<T>
, comme l'indexeur prend une valeur int
. Fondamentalement, si vous voulez une collection avec plus de int.MaxValue
éléments, vous devrez écrire les vôtres, probablement en utilisant plusieurs matrices de sauvegarde. Vous pourriez vouloir interdire explicitement les suppressions et les insertions arbitraires :)
Ce n'est pas une machine de Turing, les ordinateurs ont des limites. Quelle est la question? –
vérifier celui-ci: http://stackoverflow.com/questions/3906891/what-is-the-max-limit-of-data-into-liststring-in-c –
que voulez-vous faire avec> 2^32 objets? – stukselbax