Каковы макс. объекты в Списке <T>?

Кто-либо знает, каково макс. количество объектов в Списке?

Как я увеличиваю тот размер? Или есть ли набор, который берет бесконечные объекты? (так же, как уместился бы в памяти, который является),

Править:

Я добираюсь из исключения памяти, когда количество = 134217728 в списке ints. получило 3 ГБ RAM, которой 2.2 используются. Нормальный звук

33
задан Tony The Lion 5 January 2010 в 21:38
поделиться

5 ответов

[

][]List[] будет ограничен максимальным значением массива, равным 2 Гб (даже в x64). Если этого недостаточно, то вы используете неправильный тип хранения данных. Вы можете сэкономить много на накладных расходов, начав с правильного размера, хотя - передав []int[] в конструктор.[

] [

]Re your edit - with 134217728 x Int32, то есть 512MB. Помните, что []List[] использует алгоритм удвоения; если вы передаете элементы через []Add[] (не выделяя сначала всего места), то он попытается удвоить до 1Гб (поверх 512Мб, которые у вас уже есть, [], остальная часть вашего приложения[], и, конечно же, время выполнения CLR и библиотеки). Я предполагаю, что вы на x86, так что у вас уже есть ограничение в 2 Гб [] для каждого процесса [], и вполне вероятно, что вы фрагментировали вашу "большую кучу объектов" до [] смерти [] во время добавления элементов. [

] [

]Лично, да, это звучит примерно правильно, чтобы начать получение вне памяти в этот момент.[

] [
] [

]Правка: в .NET 4.5, массивы больше 2GB разрешены, если переключатель [][][][] включен. Тогда ограничение составляет 2^31 элементов. Это может быть полезно для массивов ссылок (по 8 байт в x64), или массивов больших []struct[]s.[

].
57
ответ дан 27 November 2019 в 18:15
поделиться
[

] Ограничено только памятью. [

] [

] edit: or not, 2Gb's is the limit! Это довольно интересно, []BigArray, обходя ограничение на размер массива 2Гб[][

]
1
ответ дан 27 November 2019 в 18:15
поделиться
[

]Список будет динамически расширяться и вмещать столько элементов, сколько вы захотите - до тех пор, пока вы не превысите доступную память![

] [

]Из документации MSDN: [

] [

]Если значение Count уже равно Capacity, то емкость Списка увеличивается за счет автоматического перераспределения внутреннего массива, а существующие элементы копируются в новый массив до добавления нового элемента.[

] [

]Если значение Count меньше Capacity, то этот метод является операцией O(1). Если для размещения нового элемента необходимо увеличить мощность, то этот метод становится операцией O(n), где n - счетчик[

].
0
ответ дан 27 November 2019 в 18:15
поделиться
[

] Ограничение по списку - 2,1 миллиарда объектов или размер вашей памяти, которая когда-либо попадала в первую очередь. [

]
0
ответ дан 27 November 2019 в 18:15
поделиться
[

]Интерфейс определяет Count и IndexOf и т.д. как тип int, поэтому я бы предположил, что int.MaxValue или 2,147,483,647 - это наибольшее количество элементов, которые вы можете записать в список.[

] [

]На самом деле надо задаться вопросом, зачем вам понадобилось так много, скорее всего, существует более разумный подход к управлению данными.[

]
0
ответ дан 27 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: