Каждый раз, когда вы работаете с таким большим массивом, вам, вероятно, следует попытаться найти лучшее решение проблемы. Но, как говорится, я все же попытаюсь ответить на ваш вопрос.
Как упоминалось в этой статье , для любого объекта в .Net существует ограничение в 2 ГБ. Для всех x86, x64 и IA64.
Как и при работе с 32-битной Windows
систем, существует ограничение в 2 ГБ
размер объекта, который вы можете создать в то время как
запуск 64-битного управляемого приложения
в 64-битной операционной системе Windows.
Также, если вы определите слишком большой массив в стеке, у вас будет переполнение стека. Если вы определите массив в куче, он попытается разместить все это в одном большом непрерывном блоке. Было бы лучше использовать ArrayList, который имеет неявное динамическое распределение в куче. Это не позволит вам преодолеть 2 ГБ, но, вероятно, позволит вам приблизиться к нему.
Я думаю, что предел размера стека будет больше, только если вы используете архитектуру и операционную систему x64 или IA64. Используя x64 или IA64, вы будете иметь 64-битную выделяемую память вместо 32-битной.
Если вы не можете выделить список массивов сразу, вы, вероятно, можете выделить его по частям.
Используя список массивов и добавляя по одному объекту за раз на компьютере с Windows x 2008 с 64 ГБ ОЗУ, максимум, что я могу получить для ArrayList - это размер: 134217728. Поэтому я действительно думаю, что вам нужно найти лучшее решение для Ваша проблема, которая не использует столько памяти. Возможно запись в файл вместо использования оперативной памяти.