È un'applicazione ASP.NET a 32 bit in esecuzione su Windows a 64 bit LARGEADDRESSAWARE
-
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.
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.