List<int>
jest wspierany przez int[]
. będzie nie tak szybko, jak większa tablica podłoże nie może być przydzielona - i pamiętać, że:
- Istnieje limit 2GB na obiekt w CLR nawet w 64 bity (EDIT: jak .NET 4.5, to można tego uniknąć dla 64-bitowego CLR - patrz
<gcAllowVeryLargeObjects>
)
- Lista spróbuje przydzielić tablicę backingową, która jest większa niż wymagana od razu, w celu dostosowania późniejszych żądań
Add
bez realokacji.
- Podczas realokacji musi być wystarczająca ilość pamięci całkowitej dla obu nowych tablic i.
Ustawianie Capacity
do wartości, która będzie umieścić tablicę podkładową pobliżu granicy teoretycznej może Ci wyższą temperaturę graniczną niż przyrostu naturalnego, ale to ograniczenie z pewnością nadejdzie.
bym oczekiwać granicę około 2 elementów (536,870,912) - Jestem nieco zaskoczony, że nie udało się wyjść poza 134,217,728. Ile masz pamięci? Jakiej wersji .NET używasz i na jakiej architekturze? (Możliwe, że limit dla jednego obiektu wynosi 1 GB dla 32-bitowego CLR, nie pamiętam na pewno.)
Należy pamiętać, że nawet jeśli limit na obiekt nie był problemem, tak szybko jak tylko Powyżej 2 elementów, które mogą mieć problemy adresowania tych elementów bezpośrednio z List<T>
, jak indeksator ma wartość int
.
Zasadniczo, jeśli chcesz kolekcję zawierającą więcej niż int.MaxValue
elementów, musisz napisać własną, prawdopodobnie za pomocą wielu tablic tylnych. Możesz wyraźnie zabronić przeprowadzek i dowolnych wstawień :)
To nie jest maszyna Turinga, komputery mają ograniczenia. Jakie jest pytanie? –
sprawdź ten: http://stackoverflow.com/questions/3906891/what-is-the-max-limit-of-data-into-list-in-c-pl –
co chcesz zrobić z> 2^32 obiekty? – stukselbax