Por lo que he encontrado, no hay una manera simple de control the size of the heap de una aplicación .Net usando el CLR.
El enlace arriba solo la mitad responde la pregunta. Cuando investigué este mismo problema, la respuesta es "El montón crece para usar toda la memoria disponible" como si esa fuera la única razón por la que deseara controlar el tamaño máximo de almacenamiento dinámico.
En entornos de servidor (normalmente Java), no desea que una aplicación de mal comportamiento acapare la memoria a expensas de otras aplicaciones alojadas. Una solución simple es limitar la cantidad de memoria que la aplicación puede usar para su montón. Esto se logra con el argumento -Xmx de Java para que pueda garantizar que la aplicación no usará más de lo que está planificado, p. Ej. -Xmx256M.Dado que asignar memoria en el montón durante la inicialización puede ralentizar el inicio de las aplicaciones, Java usa el argumento -Xms para permitir que las aplicaciones que hacen mucha creación de objetos durante la inicialización comiencen con un gran bloque de almacenamiento dinámico en lugar de que la JVM cambie el tamaño del montón va.
.Net's CLR no tiene esta capacidad. Sospecho que es porque .Net's CLR no es una máquina virtual. El CLR pasa a ser una API (bastante completa, podría agregar) que sirve como un adaptador para .dlls nativos que equivale a un enfoque mucho más parecido a un ejecutable cuando se trata de la administración de la memoria.
He hecho esta pregunta sobre el desarrollo de SharePoint y oí que es posible controlar el amperaje mediante el uso de módulos IIS llamados Aplicaciones Web por lo que puede decirle a IIS que limite la memoria de una aplicación web determinada. Me pregunto si esto se debe a que IIS tiene rutinas personalizadas que reemplazan/anulan new()/malloc()/etc y así pueden proporcionar este tipo de control a las aplicaciones cliente. Eso significa que las aplicaciones .Net independientes no tienen éxito a menos que desee escribir un administrador de memoria personalizado en C++ y crear una interfaz para .NET
Gracias - información interesante sobre el alojamiento de CLR. Probablemente exagerado por lo que estoy haciendo ahora. Solo me aseguraré de no ser un cerdo de memoria. – serg10
Los entornos de servidores compartidos que alojan varias aplicaciones deben garantizar que la memoria máxima asignada por todas sus aplicaciones de cliente no exija en exceso la memoria disponible. No quiere que una sola aplicación que funciona mal descuelgue todo el servidor porque asigna toda la memoria disponible. –
@Kelly, eso es lo que hacen IIS y SQL Server, porque son hosts para otras aplicaciones administradas, y controlan cuánta memoria tienen permitidas las aplicaciones alojadas ... por otro lado, una aplicación .Net no alojada es gratuita para asignar tanto como una aplicación nativa, no hay diferencia allí (es por eso que en .net las APIS de alojamiento se deben usar para controlar la cantidad de memoria asignada) –