2009-11-13 8 views

Odpowiedz

20

Obecna implementacja List<T> wykorzystuje Int32wszędzie - skonstruować swoją tablicę podłożu, na jego Count nieruchomości, jako indekser i dla wszystkich jego operacji wewnętrznych - nie ma więc prąd teoretyczny maksymalnie Int32.MaxValue pozycji (2^31-1 lub 2147483647).

Ale struktura .NET ma także maksymalny rozmiar obiektu wynoszący 2 GB, dzięki czemu można uzyskać tylko w pobliżu limitu elementów z listami pozycji jednobajtowych, takich jak List<byte> lub List<bool>.

W praktyce prawdopodobnie skończy Ci się pamięć ciągła, zanim osiągniesz jeden z tych limitów.

+2

* Teoretycznie * oznacza, że ​​można tylko losowo uzyskiwać dostęp do elementów o wartości "Int32.MaxValue", a nie jak wiele elementów może być, * teoretycznie *, oczywiście. –

+1

@Martinho: Obecna implementacja używa 'Int32' * wszędzie *, więc nie jest to zwykły dostęp ograniczony do 2^31 elementów. (Oczywiście używanie "Int32" wewnętrznie jest tylko szczegółem implementacji, ale właściwości takie jak indeksator i 'Count' są częścią zamówienia publicznego.) – LukeH

Powiązane problemy