2010-10-11 7 views

Odpowiedz

66

Maksymalna liczba elementów, które mogą być przechowywane w obecnej implementacji List<T>, wynosi teoretycznie Int32.MaxValue - nieco ponad 2 miliardy.

W obecnej implementacji Microsoft CLR istnieje maksymalny rozmiar obiektu wynoszący 2 GB. (Możliwe, że inne implementacje, na przykład Mono, nie mają tego ograniczenia.)

Twoja konkretna lista zawiera ciągi znaków, które są typami odniesienia. Rozmiar odwołania będzie wynosił 4 lub 8 bajtów, w zależności od tego, czy korzystasz z systemu 32-bitowego czy 64-bitowego. Oznacza to, że praktyczny limit liczby łańcuchów, które można przechowywać, będzie wynosił około 536 milionów na 32-bitowych lub 268 milionów na 64-bitowych.

W praktyce najprawdopodobniej najprawdopodobniej zabraknie pamięci, którą można przydzielić, zanim osiągniesz te ograniczenia, szczególnie jeśli używasz systemu 32-bitowego.

+3

Oprócz ustalonego limitu górnego wielokrotne tworzenie i zwalnianie dużych tablic może prowadzić do niespójnej alokacji, gdy jeszcze bardziej uzasadnione alokacje (rzędu kilku 100 MB) mogą spowodować OutOfMemoryException, nawet jeśli pamięć jest faktycznie dostępna. Jeśli masz do czynienia z bardzo dużymi kolekcjami, wpłynie to na twój projekt. –

9

2147483647 ponieważ wszystkie funkcje wyłączone Lista używa int.

Źródło z mscorlib:

private T[] _items; 
private int _size; 

public T this[int index] 
{ 
    get 
    { 
     //... 
    } 
} 
+1

Brak tej odpowiedzi nie jest dobry. Możemy po prostu umieścić prawie 268 milionów referencji w 64-bitowym systemie operacyjnym w CLR w tym dniu, jak wyjaśniono w wybranej odpowiedzi. – Julien

+2

2 147 483 647 jest znacznie większa niż 268 milionów. – sqweek

3

list.Count() nieruchomość jest Int32, więc musi to być maxium limit Int32 ale jak lista wykonuje ponad ten limit jest miłe spostrzeżenie.

jeśli wykonasz operacje spisywania listy, to teoretycznie będzie liniowy.

Powiedziałbym, że jeśli masz bardzo dużą liczbę przedmiotów o kolekcjach równoległych w .net 4.0, to sprawiłoby, że twoje operacje na listach byłyby bardziej responsywne.

Powiązane problemy