Ограничение размера объекта .Net - PullRequest
4 голосов
/ 30 ноября 2010

Кажется, для объектов в .Net существует ограничение размера 2 ГБ: Как запустить Fsi.exe в 64 битах?

Есть ли обходной путь?Я хотел бы загрузить в память очень большой массив с плавающей запятой (10 ГБ), а затем выполнить некоторую работу.

Спасибо

Ответы [ 3 ]

10 голосов
/ 30 ноября 2010

.NET ограничивает любой объект до 2 ГБ даже на 64-битных платформах. Вы можете создать свой собственный тип данных, который использует несколько объектов для хранения большего количества данных, таким образом, получая ограничение в 2 ГБ для одного объекта. Например, List<float[]> позволит вам хранить более 2 ГБ, но вам придется написать необходимый сантехнический код, чтобы он вел себя подобно одному большому массиву.

Вы также можете проверить этот вопрос .

5 голосов
/ 26 июня 2012

В версиях .NET до 4.5 максимальный размер объекта составляет 2 ГБ.Начиная с версии 4.5, вы можете выделять более крупные объекты, если gcAllowVeryLargeObjects включен.Обратите внимание, что ограничение для string не затрагивается, но «массивы» должны также охватывать «списки», поскольку списки поддерживаются массивами.

2 голосов
/ 30 ноября 2010

Я не думаю, что есть простой обходной путь для этого, мне кажется, могут быть трудности с реализацией кучи без ограничения размера объекта в 2 Гб.

Может быть, вам лучше разбить данные как-нибудь. Должна быть возможность написать класс, который ведет себя как массив, но разбивает данные на фрагменты фиксированного размера под капотом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...