List<T>
будет ограничен максимумом массива, равным 2 ГБ (даже в x64). Если этого недостаточно, вы используете неправильный тип хранения данных. Вы можете сэкономить много накладных расходов, запустив правильный размер, передав int
конструктору.
Повторное редактирование - с 134217728 x Int32, то есть 512 МБ. Помните, что List<T>
использует алгоритм удвоения; если вы кормите предметы с помощью Add
(не выделяя сначала все пространство), он попытается удвоить до 1 ГБ (поверх 512 МБ, которые вы уже держите, остальная часть вашего приложения и, конечно, среда CLR и библиотеки). Я предполагаю, что вы используете x86, поэтому у вас уже есть ограничение в 2 ГБ на процесс , и, вероятно, вы фрагментировали свою "кучу больших объектов" до death при добавлении товар.
Лично да, это звучит как раз то, что нужно начинать получать нехватку памяти на этом этапе.
Редактировать: в .NET 4.5 допускаются массивы размером более 2 ГБ, если включен переключатель <gcAllowVeryLargeObjects>
. Предел тогда составляет 2 ^ 31 пунктов. Это может быть полезно для массивов ссылок (по 8 байт в x64) или для массива больших struct
s.