una publicidad programa para net gratis framework desde descargar crear como cero app aplicaciones .net windows memory

.net - publicidad - descargar programa para crear aplicaciones android



¿Cómo creo una aplicación.NET(32 bits) para usar 3 GB de RAM? (6)

Estoy creando una aplicación .NET (C #) que necesita usar mucha RAM. Recientemente supe que en las versiones de 32 bits de Windows XP solo puedo usar 2 GB, a menos que use el /3Gb y configure el indicador IMAGE_FILE_LARGE_ADDRESS_AWARE en el encabezado ejecutable. Pero dado que estoy desarrollando una aplicación .NET, supongo que no puedo modificar el ejecutable directamente, ¿o sí? Entonces, ¿qué debo hacer para permitir que mi aplicación utilice los 3 GB?


/ El conmutador de 3 GB está en el gestor de arranque del sistema operativo, no en sus aplicaciones. (EDITAR: También está presente en compiladores nativos de C / C ++, pero no en el compilador de C #). En lo que respecta a su aplicación, solicitará memoria y el sistema operativo la asignará a su proceso. Sin embargo, tiene acceso a 1 concierto más (potencialmente, no siempre obtiene 3gig dependiendo de sus periféricos de hardware) antes de que su programa use memoria virtual.

Como Marc Gavell me ha señalado, es posible que deba ejecutar el comando "editbin / LARGEADDRESSAWARE my.exe" como una opción de compilación posterior en su exe para habilitar esto. Encontré una referencia a una persona de MS hablando sobre esto aquí: MS Foros

Puedo sugerir que veas tu programa y veas si podrías volver a crearlo para usar menos memoria. ¿Quizás podría tratar con un conjunto de datos en trozos más pequeños en lugar de tratar de cargar todo al mismo tiempo en la memoria?


Bueno, no estoy seguro de esto, pero esto es lo que pienso:

Un ejecutable .NET se puede compilar de dos maneras: plataforma específica e independiente de la plataforma. Por defecto son independientes de la plataforma, y ​​el código es (como se menciona en otras respuestas) JIT al código específico de la plataforma cuando se ejecuta el programa.

Ahora, por ejemplo, si su ejecutable es uno de estos independientes de la plataforma, y ​​lo ejecuta en un sistema operativo de 64 bits, estará JIT con código de 64 bits, ¿verdad? Por lo tanto, será capaz de abordar más de 3GB de RAM.

Lo que trato de decir es que no creo que importe para nada lo que está escrito en el encabezado PE. La cantidad real de RAM disponible está determinada por .NET runtime, que a su vez observa la plataforma actual y produce el mejor código JIT que pueda.

Creo que no debes preocuparte por el modificador / 3GB, ya que .NET se encargará de eso. ¡Confíe en .NET! :)


Por lo que recuerdo, el conmutador / 3GB solo se puede usar para Windows Server (2000 o 2003) pero no para Windows XP. Necesita escribir / 3GB al final del archivo boot.ini. De esta manera, para las aplicaciones, el sistema operativo permite más memoria que normalmente asigna para usar en los procesos del kernel. Sin embargo, / 3GB no significa que puede usar 3GB de memoria para su aplicación, simplemente puede usar más memoria pero no necesariamente tiene que ser de 3GB. Para aplicaciones .net, de nuevo, por lo que recuerdo, con el modificador / 3GB puede usar hasta 1.8 GB de memoria. Por cierto, es posible que también quiera verificar / cambiar PAE.


También debe aumentar el tamaño de conjunto de trabajo máximo de su proceso: consulte la API SetProcessWorkingSetSize .


Un .NET exe sigue siendo un archivo PE estándar; por lo que podría intentar usar editbin /LARGEADDRESSAWARE para establecer el indicador, pero tenga en cuenta que esto no funcionará si está utilizando algo como ClickOnce (ya que mantiene un hash criptográfico de los archivos).

Sin embargo, tenga en cuenta que aún tendrá los mismos límites .NET en términos del tamaño máximo de un solo objeto / matriz. Para grandes cantidades de memoria, x64 es una mejor idea.


Podría intentar usar Remoting a través de Named Pipes y obtener más memoria al tener físicamente más procesos.

Si está haciendo alguna forma de interoperabilidad (y los sockets .Net normales cuentan aquí) debe crear un caché de objetos (por ejemplo, con sockets un byte [] buffer) que asigne una gran cantidad de estos objetos al inicio de la aplicación.

Deberías leer este artículo .