Насколько я нашел, не существует простого способа управления размером кучи приложения .Net с помощью CLR.
Ссылка выше только половина отвечает на вопрос. Когда я исследовал эту же проблему, я ответил: «Куча увеличивается, чтобы использовать всю доступную память», как будто это единственная причина, по которой вы хотите контролировать максимальный размер кучи.
В (обычно Java) серверных средах вы не хотите, чтобы приложение с плохим поведением загружало память за счет других размещенных приложений. Простое решение - ограничить объем памяти, который приложение может использовать для своей кучи. Это достигается с помощью аргумента Java -Xmx, так что вы можете гарантировать, что приложение не будет использовать больше, чем запланировано, например. -Xmx256M. Поскольку выделение памяти в куче во время инициализации может замедлить запуск приложений, Java использует аргумент -Xms, чтобы позволить приложениям, которые много создают объекты во время инициализации, начинать с большого блока кучи вместо того, чтобы JVM постоянно изменяла размер кучи по мере идет.
.Net CLR не имеет этой способности. Я подозреваю, что это потому, что .Net CLR не является виртуальной машиной. CLR - это API (я бы добавил, достаточно всеобъемлющий), который служит адаптером для нативных .dll, что приравнивается к подходу, гораздо более похожему на исполняемый файл, когда дело доходит до управления памятью.
Я задал этот вопрос о разработке SharePoint и действительно слышал, что можно было бы управлять размером кучи с помощью модулей IIS, называемых веб-приложениями, с помощью которых вы можете указать IIS ограничить память данного веб-приложения. Интересно, так ли это, потому что IIS имеет настроенные подпрограммы, которые заменяют / переопределяют new () / malloc () / etc и, таким образом, могут предоставлять этот тип управления клиентским приложениям. Это означает, что автономным приложениям .Net не повезло, если вы не хотите написать собственный менеджер памяти на C ++ и создать интерфейс для .Net
.