Acelerando o Magic xpa com Native Image Generation

O Magic xpa runtime (Plataforma de Execução), como maioria já deve estar sabendo, é um aplicativo .NET.

E como os demais aplicativos .NET, ele pode se beneficiar de um recurso chamado “Native Image Generation”, que nada mais é que a compilação definitiva do código MSIL em código nativo. Isso transforma muitas instruções intermediárias que precisam ser “analisadas e compiladas” durante cada execução (JIT) em instruções finais de máquina, prontas para execução.

E qual a vantagem?

Execução mais rápida do aplicativo, e utilização mais eficiente da memória.

É difícil realizar um benchmark de quanto é a melhora geral da performance, mas se você se interessar em tentar, segue abaixo o que pode ser feito :).

A geração da imagem nativa de um aplicativo é feito com um utilitário do próprio .NET framework, chamado Ngen.

Infelizmente, ele exige que o assembly (programa .NET) esteja assinado e possua um “strong name”, coisa que o runtime do Magic xpa (MgxpaRuntime.exe) não possui. Então, precisaremos fazer algumas adaptações nele, antes da conversão.

Para essa preparação, necessitaremos de mais três utilitários: ILDasm, ILasm e Sn.

Se você tem alguma versão do Visual Studio (Xpress por exemplo) instalada, você já deve possuí-los na sua máquina. Senão, baixe da internet e instale (é gratuito).

Este são os passos:

NOTA: os caminhos dos arquivos podem ser diferentes na sua máquina

A)     Gerar uma chave para assinatura do runtime Magic xpa. Para isso, execute este comando:

“C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn” -k MgxpaRuntime.snk

Imagem_001

B)     Extrair o código IL do runtime Magic xpa em um arquivo. Para isso, execute este comando:

“C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm” MgxpaRuntime.exe /out:MgxpaRuntime.il

Imagem_002

C)     Renomear o arquivo original do runtime Magic xpa, por segurança.

Imagem_003

D)     Criar um novo runtime Magic xpa, com a assinatura e “strong name”. Para isso, execute este comando:

“C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm” /32BITPREFERRED /EXE /KEY=MgxpaRuntime.snk MgxpaRuntime.il > MgxpaRuntime.log

Imagem_004

E)     Agora, já é possível usar o Ngen com esta nova versão do runtime Magic xpa. Para isso, execute este comando:

“C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen” install MgxpaRuntime.exe

Imagem_005

Ok. Com estes passos os assemblies do Magic xpa foram criados e serão utilizados sempre que o runtime iniciar, otimizando o seu desempenho.

Veja o exemplo:

Magic xpa runtime sem o uso do Ngen:

Imagem_006

Magic xpa runtime com o uso do Ngen:

Imagem_007

Um detalhe que não deve deixar de ser mencionado, é que as imagens nativas são salvas em um repositório local, na máquina onde o Ngen foi executado. Por isso:

  • Se você estará usando o Magic xpa runtime como um Enterprise Server ou um RIA Server, o passo (E) deve ser executado no servidor.
  • Se estará usando como um Client Server, mas acessado via TS (ou Citrix, Tarantella, etc…), o passo (E) também deve ser executado no servidor.
  • Se estará usando como um Client Server normal, onde Magic xpa runtime será executado na máquina do usuário, então o passo (E) deve ser realizado em todas as máquinas (de todos os usuários).

As máquinas que acessarem o Magic xpa runtime sem ter executado o passo (E) continuarão funcionam normalmente, mas sem o benefício de usar as imagens nativas.

Outro detalhe: se você decidir repetir o passo (D), deve também executar o passo (E) para manter as imagens nativas atualizadas. Caso reinstale o Magic xpa, ou instale nova versão, precisa repetir todos os passos.

Não é necessário ficar repetindo estes passos quando se atualiza a aplicação (arquivos .ecf) ou se altera configurações (arquivos .ini). Apenas quando há mudanças no Magic xpa runtime.

Manoel Frederico - Gerente de Produto e Magic Evangelista
Manoel Frederico – Gerente de Produto e Magic Evangelista

2 comentários

    1. Olá. Não o da máquina, mas o da aplicação.
      Contudo, você sempre tem de medir se a mudança é ou não relevante para o seu caso. Às vezes a melhora pode se tratar de alguns milisegundos apenas, o que acaba não justificando o esforço.

Deixe um comentário

O seu endereço de e-mail não será publicado.