È un'applicazione ASP.NET a 32 bit in esecuzione su Windows a 64 bit LARGEADDRESSAWARE

StackOverflow https://stackoverflow.com/questions/1661765

  •  12-09-2019
  •  | 
  •  

Domanda

Ho un'applicazione ASP.NET a 32 bit esistente che utilizza 32 bit DLL non gestite.

Se faccio funzionare questo su un sistema operativo a 64 bit, sarà automaticamente LARGEADDRESSAWARE (vale a dire avere accesso alla piena 4GB di memoria virtuale)?

In caso contrario, cosa posso fare per farlo LARGEADDRESSAWARE?

questa domanda , ma manca la risposta alla domanda di cui sopra.

Modifica

Questo blog suggerisce che l'ASP. NET processo 1.1 lavoratore è LARGEADDRESSAWARE, ma tace su ASP.NET 2.0:

  

Se un sistema viene avviato con l'opzione / 3Gb   Interruttore a boot.ini (supportato solo sui   Enterprise e Data Center edizioni   Windows 2000 e tutte le versioni di   Windows XP e 2003) un Windows Server   processo che è collegato con il   Interruttore / LARGEADDRESSAWARE può "vedere"   3GB. Aspnet_wp.exe è legata a quella   modo nella versione 1.1 e può prendere   approfittare di questo.

Modifica 2

questo è un altro blog che suggerisce che le applicazioni ASP.NET a 32 bit sono LARGEADDRESSAWARE, ma non menziona la versione di ASP.NET:

  

Abbiamo trovato i componenti che sono stati   ospitata dal framework ASP.NET erano   sfruttando la memoria concerto> 2   spazio

Devo dire che sono stupito per la mancanza di informazioni pubblicate autorevoli su questo argomento.

È stato utile?

Soluzione

Sono riuscito a ottenere l'accesso a un server che esegue Windows 2003 SP2, e la risposta sembra essere sì, applicazioni ASP.NET a 32 bit sono LARGEADDRESSAWARE, e avere accesso alla piena 4GB di memoria virtuale.

ho stabilito questo:

  • esaminando w3wp.exe (il processo di lavoro IIS a 32 bit) con "dumpbin / headers". Questo dimostra che il bit LARGEADDRESSAWARE è impostato.

  • esecuzione di un'applicazione ASP.NET a 32 bit che tenta di allocare più di 2GB di memoria virtuale. Era successo

Suppongo che il risultato sarebbe lo stesso per Windows 2008 / IIS7, ma non l'ho testato.

Altri suggerimenti

No non lo farà. Per rendere più grande l'indirizzo a conoscenza, è necessario eseguire le IIS come un'applicazione a 64 bit (non in funzione utilizzando WOW). Questo significa che le DLL a 32 bit non gestiti dovranno essere sostituiti con le versioni a 64 bit di loro.

normalmente, asp.net convertirà a un'applicazione a 64 bit quando si seleziona l'opzione di compilatore di indirizzare qualsiasi piattaforma (che è il default). Il problema con l'applicazione a 32 bit che si ha è che ci sono non gestiti DLL a 32 bit. Questi non possono eseguire in un'applicazione a 64 bit. Questo significa che si deve eseguire l'applicazione ASP.NET come applicazione a 32 bit il che significa che è necessario installare la versione a 32 bit di IIS sul server a 64 bit. L'unico modo per evitare questo è quello di sostituire le DLL non gestiti a 32 bit con quelli che sono progettati per funzionare in un ambiente a 64 bit. Un'applicazione a 32 bit non può utilizzare tutta la memoria sui server a 64 bit, quindi l'applicazione non sarà in grado di "vedere" la memoria aggiuntiva.

applicazioni ASP.NET saranno ricompilare se stessi (che fornisce il bersaglio qualsiasi opzione di ambiente è impostata al momento della compilazione), in un ambiente a 64 bit, quindi non sono più le applicazioni a 32 bit.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top