.net - post_max_size - wp memory limit
¿Hay un límite de memoria para un solo proceso.NET? (6)
¿32 bits o 64 bits? 32 bits es 2 GB (para un proceso), 64 bits es 1 TB (servidor Enterprise Edition 2003) .
Sin embargo, el tamaño máximo de un objeto CLR es 2gb incluso en 64 bits.
Actualización: la información anterior fue correcta en 2008. Consulte la respuesta de Ohad para obtener información más reciente. El servidor de Windows 2016 puede tener un máximo de 24TB .
Actualmente estamos pensando en construir un sistema de caché para mantener los datos extraídos de una base de datos SQL y ponerlos a disposición de un par de otras aplicaciones (sitio web, servicio web, etc.). Imaginamos que la memoria caché se ejecuta como un servicio de Windows y básicamente consiste en un diccionario inteligente que contiene las entradas de la memoria caché. Mi pregunta es, ¿hay un límite para el conjunto de trabajo de la aplicación (se ejecutará en Windows Server 2003)? ¿O es la cantidad de memoria física el límite?
Al igual que con cualquier otro programa de Windows, está limitado por el espacio de direcciones. Es decir: en 32 bits, puede tener 2 GB de espacio de direcciones. En x64, puede tener 8 TB.
Si no tiene 8 TB de memoria física, comenzará a aparecer la página.
En Windows de 32 bits puede obtener un poco más de memoria arrancando Windows con el indicador / 3gb y marcando su aplicación como "gran dirección consciente"
La siguiente tabla de msdn.microsoft.com/en-us/library/… es la respuesta más precisa a su consulta. Tenga en cuenta que el indicador IMAGE_FILE_LARGE_ADDRESS_AWARE no se puede configurar directamente desde el compilador administrado, aunque afortunadamente se puede configurar después de la compilación mediante la utilidad editbin . 4GT se refiere a la bandera / 3gb.
Matthias,
No es en realidad una respuesta a la pregunta directa, sino otra forma de abordar este problema que sorteará algunos de los grandes escollos, que puede ser un gran dolor de cabeza con soluciones de almacenamiento en caché. (Lo siento, no tengo ninguna lectura recomendada sobre el tema).
Implementamos esto en un proyecto anterior, y creó otros problemas.
Para el acceso sin conexión, ¿puede usar sql express en los escritorios para crear un espejo de su base de datos (o solo el bit que necesita almacenar en caché)? Entonces, todo lo que tiene que hacer es cambiar a qué base de datos apunta su aplicación. Incluso puede usarlo para almacenar diferencias y reproducirlas en el servidor, aunque esto tiene otros problemas. Puede modificar los permisos en la copia local para que esta solo sea de lectura, si así es como debería ser.
Los diccionarios que está pensando en crear sonido son notablemente similares a los índices Sql. Confío en que sql hará el trabajo por usted si puede diseñarlo de esa manera. ¿Por qué reinventar esa rueda? Si lo hace, deberá pensar detenidamente sobre la caducidad de la memoria caché y la gestión de la memoria, especialmente si se trata de un servicio de Windows.
Buena suerte,
Sam
Recientemente he estado haciendo un amplio perfil sobre los límites de memoria en .NET en un proceso de 32 bits. Todos nos sentimos bombardeados por la idea de que podemos asignar hasta 2,4 GB (2 ^ 31) en una aplicación .NET, pero lamentablemente esto no es cierto :(. El proceso de solicitud tiene mucho espacio para usar y el sistema operativo funciona muy bien. Sin embargo, el propio .NET parece tener su propia sobrecarga, que representa aproximadamente 600-800MB para aplicaciones típicas del mundo real que superan el límite de memoria. Esto significa que tan pronto como se asigna una matriz de enteros que toma aproximadamente 1,4 GB, debe esperar ver OutOfMemoryException ().
Obviamente en 64 bits, este límite se produce mucho más tarde (chateemos en 5 años :)), pero el tamaño general de todo en la memoria también crece (me parece que es ~ 1.7 a ~ 2 veces) debido al aumento del tamaño de la palabra.
Lo que sí sé con certeza es que la idea de Memoria Virtual del sistema operativo definitivamente NO le da un espacio de asignación prácticamente infinito dentro de un proceso. Está solo allí, por lo que los 2.4 GB completos son direccionables para todas las (muchas) aplicaciones que se ejecutan a la vez.