Menos espaço
Como fazer uma instalação menor do Mono
A instalação mais básica do mono atualmente ocupa cerca de 3,7 MB de espaço em disco, isso inclui cerca de 1,7 MB para o JIT e 2 MB para o mscorlib.dll.
Os requisitos de memória para execução dependem de quão complexa é a aplicação alvo. Uma aplicação simples vai se satisfazer com 2 MB de memória de escrita para o processo do mono em si e 5 MB de memória compartilhada de apenas leitura para as bibliotecas mmapped e montagens. Até aqui sugere-se que o requisito mínimo de memória de sistema seja 32 MB, embora o mono possa executar com menos memória, o total depende das aplicações que estão executando no sistema.
Há várias coisas que podem ser feitas para reduzir o espaço ocupado pela execução do mono. Seguem algumas dicas e ideias:
- Removendo recursos desnecessários
- Removendo informações desnecessárias
- Dicas de compilação
- Reduzindo o código nas montagens
Removendo recursos desnecessários
O Mono pode ser configurado para desabilitar certos recursos. Alguns deles são necessários apenas para ajudar a depurar o mono, ou apenas em alguns sistemas. A diretiva a ser usada é –enable-minimal=list onde list é uma lista de recursos separadas por vírgula, dessa forma: aot, profiler, decimal, pinvoke, debug, reflection_emit, large_code, logging, com, ssa, generics. Então faça algo parecido com isso em seu diretório com o código fonte do mono:
./configure --enable-minimal=aot,profiler
para remover o suporte à AOT e profiling da construção.
A opção adicional –enable-small-config vai reduzir mais ainda os requisitos de memória em tempo de execução e limitar algumas capacidades, com o número máximo de threads e o tamanho máximo de código em métodos, etc.
Note que algumas das diretivas não estão implementadas no momento, mas é muito fácil contribuir nessa área: escolha uma diretiva não implementada, modifique o mono com os #ifdefs apropriados, teste a construção com e sem a funcionalidade e envie-nos um patch.
O GC Boehm pode ser construído para suportar melhor heaps menores (normalmente se você quer um mono menor, você também tem restrições no uso da memória RAM). Modifique libgc/configure.in para definir incondicionalmente SMALL_CONFIG adicionando a seguinte linha:
AC_DEFINE(SMALL_CONFIG)
Removendo informações desnecessárias
O mono inclui informações para suportar o gerenciamento de internacionalização e agrupamento. Para reduzir o número de internacionalizações suportadas, entre em tools/locale-builder e digite
make minimal MINIMAL_LOCALES=en_US
make install-culture-table
e então execute make no diretório do topo para construir um mono com suporte apenas à internacionalização en_US.
Muitos KBs podem ser poupados removendo dados de agrupamento desnecessários (FIXME: adicione detalhes aqui).
Dicas de compilação
Garanta a compilação com otimizações de tamanho, faça isso digitando:
make CFLAGS=-Os
no diretório topo do mono depois de configurar. Isso pode poupar centenas de kilobytes. Lembre-se também de retirar informações desnecessárias do binário final com o comando strip:
strip $prefix/bin/mono
para remover informações de depuração e de símbolos não utilizados.
Reduzindo o código nas montagens
Para reduzir o tamanho das montagens gerenciadas, use a ferramenta de ligação no módulo cecil no git.