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
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
C) Renomear o arquivo original do runtime Magic xpa, por segurança.
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
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
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:
Magic xpa runtime com o uso do Ngen:
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.
Então isso melhora o desempenho da maquina ?
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.