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.
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. –