Pergunta

eu sei que .NET é JIT compilado para a arquitetura em que você está executando pouco antes da execução do aplicativo, mas o compilador JIT otimiza a arquitetura de 64 bits?

Há algo que precisa ser feito ou considerado ao programar um aplicativo que será executado em um 64bit system?(ou seja,O uso do Int64 melhorará o desempenho e o compilador JIT fará com que o Int64 funcione automaticamente em sistemas de 32 bits?)

Foi útil?

Solução

O JIT de 64 bits é diferente daquele de 32 bits, então eu esperaria algumas diferenças na saída - mas não mudaria para 64 bits apenas por isso e não esperaria ganhar muita velocidade (se houver) no tempo de CPU mudando para 64 bits.

Você notará uma grande melhoria no desempenho se seu aplicativo usar muita memória e o PC tiver RAM suficiente para acompanhá-lo.Descobri que os aplicativos .NET de 32 bits tendem a começar a lançar exceções de falta de memória quando você chega a cerca de 1,6 GB em uso, mas eles começam a sobrecarregar o disco devido a paginação muito antes disso - então você acaba ficando vinculado à E/S.

Basicamente, se o gargalo for a CPU, é improvável que 64 bits ajude.Se o seu gargalo for a memória, você verá uma grande melhoria.

O uso do Int64 melhorará o desempenho e o compilador JIT fará o Int64 funcionar automaticamente em sistemas de 32 bits

O Int64 já funciona em sistemas de 32 e 64 bits, mas será mais rápido rodando em 64 bits.Portanto, se você trabalha principalmente com números com Int64, executar em um sistema de 64 bits deve ajudar.

O mais importante é medir o seu desempenho.

Outras dicas

Esse é um bom artigo sobre o assunto, escrito por uma das pessoas que trabalhou no JIT de 64 bits.Basicamente, a menos que você precise absolutamente do espaço de endereço que 64 bits pode oferecer ou precise fazer contas de 64 bits, provavelmente perderá desempenho.Como os ponteiros são maiores, o cache é efetivamente reduzido pela metade, por exemplo.

Percebi que 64 bits é muito mais lento.

Como foi afirmado, o compilador JIT de 64 bits se comporta de maneira diferente do compilador JIT x86.O compilador x86 aproveitará algumas otimizações que o x64 não tira.

Por exemplo, no .NET 3.5, o JIT de 32 bits irá incorporar chamadas de função com estruturas como argumentos, mas o JIT de 64 bits não.

No código de produção, vi compilações x86 rodando até 20% mais rápido que compilações x64 (sem outras alterações)

Resumindo, use 64 bits apenas se

  1. Você precisa de memória extra e não há como evitar isso.
  2. Você programa, por ex.aplicativos científicos e precisam de maior precisão matemática

Em todos os outros aspectos, a partir de hoje, o compilador de 64 bits no .NET está um passo abaixo.

As otimizações de desempenho feitas nos compiladores .NET são um grande problema.

Os gargalos de desempenho serão os mesmos, independentemente de a arquitetura ser de 32 ou 64 bits.Os problemas de desempenho tendem a ser o resultado de algoritmos abaixo do ideal – a escolha entre os tipos de 32 e 64 bits não afetará significativamente o desempenho.

Mais importante ainda, não tente melhorar o desempenho de algo antes de medi-lo.Em particular, você deve criar um perfil do código para determinar onde estão seus gargalos de desempenho.

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