É um aplicativo ASP.NET de 32 bits em execução no Windows de 64 bits LARGEADDRESSAWARE

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

  •  12-09-2019
  •  | 
  •  

Pergunta

Tenho uma aplicação ASP.NET de 32 bits existente que utilizado de 32 bits DLLs não gerenciados.

Se eu executar este em um 64-bit OS, irá automaticamente ser LARGEADDRESSAWARE (ou seja, ter acesso ao 4GB cheio de memória virtual)?

Se não, o que posso fazer para torná-lo LARGEADDRESSAWARE?

Googling apareceu esta pergunta , mas falta-lhe a resposta para a pergunta acima.

Editar

Este blog sugere que o ASP. NET processo 1.1 trabalhador é LARGEADDRESSAWARE, mas é omisso sobre ASP.NET 2.0:

Se um sistema é inicializado com o / 3GB interruptor na boot.ini (suportada somente em Enterprise e Data Center edições do Windows 2000, e todas as versões do Windows XP e Windows Server 2003) a processo que está ligada com o parâmetro / LARGEADDRESSAWARE pode "ver" 3Gb. Aspnet_wp.exe está ligada no que maneira na versão 1.1 e pode demorar proveito disso.

EDIT 2

Este é outro blog que sugere que os aplicativos ASP.NET de 32 bits são LARGEADDRESSAWARE, mas não menciona a versão ASP.NET:

Nós encontramos os componentes que foram hospedado pela estrutura ASP.NET foram aproveitando-se da memória show> 2 espaço

Devo dizer que estou espantado com a falta de informações publicadas oficial sobre este assunto.

Foi útil?

Solução

Eu consegui obter acesso a um servidor com o Windows 2003 SP2, ea resposta parece ser sim, ASP.NET aplicativos de 32 bits são LARGEADDRESSAWARE, e ter acesso ao 4GB cheio de memória virtual.

Eu estabeleci isso:

  • examinando w3wp.exe (a 32-bit processo de trabalho do IIS), utilizando "dumpbin / headers". Isso mostra que o bit LARGEADDRESSAWARE está definido.

  • a execução de um aplicativo de 32 bits ASP.NET que as tentativas para alocar mais de 2 GB de memória virtual:. Esta foi bem sucedida

Eu assumo o resultado seria o mesmo para Windows 2008 / IIS7, mas não testei.

Outras dicas

Não, não vai. Para torná-lo grande endereço consciente, você tem que executar o IIS como um aplicativo de 64 bits (não correr usando WOW). Isso significa que seu DLLs de 32 bits não gerenciados terão de ser substituídos com as versões deles de 64 bits.

Normalmente, asp.net irá converter para uma aplicação 64-bit ao selecionar a opção do compilador para atingir qualquer plataforma (que é o padrão). O problema com o aplicativo de 32 bits que você tem é que há DLLs de 32 bits não gerenciados. Estes não podem ser executados em um aplicativo de 64 bits. Isso significa que você tem que executar o aplicativo ASP.NET como um aplicativo de 32 bits, o que significa que você tem que instalar a versão de 32 bits do IIS no seu servidor de 64 bits. A única maneira de evitar isso é para substituir as DLLs não gerenciados de 32 bits com os que são projetados para funcionar em um ambiente de 64 bits. A aplicação de 32 bits não pode usar toda a memória no servidor de 64 bits, por isso, a sua aplicação não será capaz de "ver" a memória adicional.

ASP.NET aplicativos irá recompilar-se (desde que o alvo qualquer opção de ambiente é definido em tempo de compilação) em um ambiente de 64 bits, para que eles não são 32-bit aplicativos mais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top