.Net размер объекта

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

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

Спасибо

Ответы

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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