Память .NET Max использует 2 ГБ даже для сборок x64 - PullRequest
9 голосов
/ 11 июня 2009

Я прочитал (http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx), что максимальный размер объекта в .NET составляет 2 ГБ.

Правильно ли я полагаю, что если у меня есть Объект, занимающий 256 МБ памяти, поскольку это ссылочный тип, я могу иметь массив из этих 256 МБ Объектов, где все вместе взятые объекты могут занимать> 2 ГБ памяти. как размер ссылочного массива остается ниже 2 ГБ?

Ответы [ 2 ]

10 голосов
/ 11 июня 2009

Да, ваше предположение верно.

Ограничение 2 ГБ применяется к каждому объекту в отдельности. Общий объем памяти, используемый для всех объектов, может превышать 2 ГБ.

(Может ли среда выполнения выделить достаточно памяти для ваших требований, это другой вопрос. Я сомневаюсь, что сможет найти все 2 ГБ свободной памяти на 32-битной машине, но это не должно быть проблемой на 64-битной.) 1005 *

6 голосов
/ 24 мая 2012

"В .NET 4 и более ранних версиях ни один объект не может иметь размер больше 2 ГБ, даже в 64-разрядных процессах. Однако для определенных рабочих нагрузок, использующих большие массивы, это ограничение размера может быть ограничивающим. Таким образом, .NET 4.5 поддерживает снятие ограничения для массивов в 64-битных процессах, так что массивы могут быть больше 2 ГБ. Это означает, например, что вы можете выделить массив Int32.MaxValue Int32s, даже если такой массив будет использовать 8 ГБ. объекты в .NET размещаются в специальной куче, известной не случайно как куча больших объектов (LOH); в .NET 4.5 также наблюдается значительное улучшение производительности LOH, включая использование более совершенных алгоритмов для управления свободной памятью в куче ».

http://msdn.microsoft.com/en-us/library/hh285054(v=VS.110).aspx

http://blogs.msdn.com/b/somasegar/archive/2012/05/16/net-improvements-for-cloud-and-server-applications.aspx

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