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