z3x visual thrown studio solucion outofmemoryexception c# out-of-memory

visual - system.outofmemoryexception c# solucion



Excepción de falta de memoria de.NET: Usó 1.3GB pero tiene 16GB instalados (5)

Recibo una excepción de falta de memoria en mi aplicación c # cuando el uso de memoria para la aplicación supera los 1.3 GB.

Tuve el mismo problema en una máquina de 32 bits con 3 gb de memoria y tenía sentido en aquel entonces, pero ahora actualicé el hardware a una máquina de 64 bits con 16 GB de memoria con la placa madre de gama alta y la memoria RAM pero sin memoria. ¡la excepción todavía ocurre después de 1.3GB!

Sé que no hay objetos únicos de más de 2 GB y 1,3 menos los 2 GB de todos modos, por lo que el límite de MS 2GB incorporado en un solo objeto no es probable que sea el problema ...

Parece que hay un interruptor de interrupción de Windows de algún tipo cuando una aplicación alcanza cierto umbral de uso de memoria ... ¿Entonces debería haber una forma de configurar esto en el registro quizás?

¡Cualquier ayuda será apreciada!


¿Tu aplicación se ejecuta como un proceso de 64 o 32 bits? Puede verificar esto en el administrador de tareas.

Podría ser, se está ejecutando como 32 bits, a pesar de que todo el sistema se ejecuta en 64 bits.

Si es de 32 bits, una biblioteca de terceros podría estar causando esto. Pero primero asegúrese de que su aplicación compila para "Cualquier CPU", como se indica en los comentarios.


Como ya se mencionó, compilar la aplicación en x64 le brinda mucha más memoria disponible.

Pero en el caso de que se deba construir una aplicación en x86, hay una manera de aumentar el límite de memoria de 1,2 GB a 4 GB (que es el límite real para los procesos de 32 bits):

En la carpeta VC / bin del directorio de instalación de Visual Studio, debe haber un archivo editbin.exe . Entonces en mi instalación por defecto lo encuentro bajo

C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin/editbin.exe

Para que el programa funcione, tal vez vcvars32.bat debe ejecutar vcvars32.bat en el mismo directorio. Entonces un

editbin /LARGEADDRESSAWARE <your compiled exe file>

es suficiente para que su programa use 4GB de RAM. <your compiled exe file> es el exe, que VS generó al compilar su proyecto.

Si desea automatizar este comportamiento cada vez que compila su proyecto, use el siguiente evento Post-Build para el proyecto ejecutado:

if exist "$(DevEnvDir)../tools/vsvars32.bat" ( call "$(DevEnvDir)../tools/vsvars32.bat" editbin /largeaddressaware "$(TargetPath)" )

Nota: Lo mismo se puede hacer con devenv.exe para permitir que Visual Studio también use 4GB de RAM en lugar de 1.2GB (pero primero devenv.exe copia de seguridad del antiguo devenv.exe ).


Parece que tiene un arco de 64 bits, bien, pero una versión de 32 bits del tiempo de ejecución .NET y / o una versión de 32 bits de Windows.

Y como tal, el espacio de direcciones disponible para su proceso sigue siendo el mismo, no ha cambiado desde su configuración anterior.

Actualice a un SO de 64 bits y una versión .NET de 64 bits;)


Vale la pena mencionar que el valor predeterminado para una compilación ''Cualquier CPU'' ahora marca la casilla de verificación ''Preferir 32 bits''. Al establecerse en AnyCPU, en un sistema operativo de 64 bits con 16 gb de memoria RAM todavía puede golpear una excepción de falta de memoria en 2 gb si está marcada.


No hay diferencia hasta que compile en la misma arquitectura de destino. Supongo que está compilando para la arquitectura de 32 bits en ambos casos.

Vale la pena mencionar que OutOfMemoryException también se puede OutOfMemoryException si obtiene 2GB de memoria asignada por una sola colección en CLR (por ejemplo, List<T> ) en ambas arquitecturas de 32 y 64 bits.

Para poder beneficiarse de la bondad de la memoria en la arquitectura de 64 bits, debe compilar su código orientado a la arquitectura de 64 bits. Después de eso, naturalmente, su binario se ejecutará solo en 64 bits, pero se beneficiará de la posibilidad de tener más espacio disponible en la memoria RAM.