Подтвердить что ты не робот

Как увеличить размер кучи .NET?

Есть ли что-то в .NET, которое соответствует распределению размера java -Xmx памяти?

4b9b3361

Ответ 1

Этот поток выглядит именно так, как вы хотите.

Если я правильно читаю сообщение MVP, в 32-битной системе вы ограничены размером кучи размером 1,5 ГБ независимо от того, что вы получаете, как только начнется процесс. В 64-битной системе ваша куча практически не ограничена, я не думаю, что какой-либо основной сервер или ПК может содержать столько физической памяти, сколько может решить 64-битный процесс.

Ответ 2

Насколько я понял, нет простого способа контролировать размер кучи приложения .NET с помощью CLR.

Ссылка в @Dave отвечает только на половину ответа на вопрос. Когда я исследовал эту же проблему, ответ "Куча растет, чтобы использовать всю доступную память", как будто это единственная причина, по которой вы хотите контролировать максимальный размер кучи.

В среде сервера (обычно Java) вы не хотите, чтобы приложение, работающее с плохой эксплуатацией, зависало от других размещенных приложений. Простое решение - ограничить объем памяти, который приложение может использовать для кучи. Это достигается с помощью аргумента Java -Xmx, поэтому вы можете гарантировать, что приложение не будет использовать больше, чем планировалось, например. -Xmx256M. Так как выделение памяти в куче во время инициализации может замедлить запуск приложений, Java использует -Xms arg, чтобы приложения, которые много делают для создания объекта во время инициализации, начинают с большого блока кучи вместо JVM, постоянно изменяющего размер кучи, поскольку он идет.

.Net CLR не обладает этой способностью. Я подозреваю, что это потому, что .Net CLR не является виртуальной машиной. CLR - это API (вполне полный, я могу добавить), который служит адаптером для родных .dll, которые приравниваются к подходу, гораздо более похожим на исполняемый файл, когда дело доходит до управления памятью.

Я задал этот вопрос о развитии SharePoint и слышал, что можно было бы контролировать heapsize с помощью модулей IIS, называемых веб-приложениями, посредством которых вы можете сообщить IIS ограничить память данного веб-приложения. Интересно, связано ли это с тем, что IIS настроил подпрограммы, которые заменяют/переопределяют new()/malloc()/etc и, таким образом, могут предоставлять этот тип управления клиентским приложениям. Это означает, что автономные приложения .Net не повезло, если вы не хотите писать пользовательский менеджер памяти на С++ и создавать интерфейс для .Net

Суть в том, что программа CLR использует любые политики управления/управления политикой управления хостингом. Вот почему вы должны контролировать использование памяти на веб-странице С# из IIS, потому что IIS на самом деле является хост-процессом, который обеспечивает среду для выполнения кода CLR.