Pergunta

Acabo de descobrir que, se os conjuntos de geração via Reflection.Emit, o .NET framework mantém referências em um membro estático que impede Reflection.Emit classes não ser GC'ed.

Eu não posso usar DynamicMethod devido a limitações. Eu também gerar uma grande quantidade de conjuntos (compilador incremental de IronScheme) ao longo de um programa (poderia ser 1000 +).

Assim, eu estava pensando apenas para lidar com a geração de código em um domínio separado, e descarregá-lo mais tarde (ainda não decidiu como lidar com isso).

Alguém tem alguma experiência quão caro isso seria?

Foi útil?

Solução

Pelo que entendi, é apenas um pouco mais lento do que gerando um fio.


feito algumas pesquisas, tentando encontrar uma referência real para isso. Até agora, este é o melhor que pode vir acima com:
http://msdn.microsoft.com/en-us/library/aa159887. aspx

Cerca de 2/3 do caminho para baixo a que chama criando AppDomains "caro", mas depois que você pode dizer o mesmo sobre tópicos em determinados contexts- ele realmente depende do que o segmento específico faz na criação.

Mais uma vez: é meu entendimento que um AppDomain é essencialmente um fio (ou vários segmentos) dentro de um processo - um delimitador lógico, se quiserem - de tal forma que o tempo de execução garante certas proteções adicionais estão em vigor que impedem AppDomains separadas interferir uns com os outros. Para criar um novo AppDomain dentro de um processo existente (aplicação) o quadro tem que fazer todo o trabalho associado com a criação de um novo segmento, além de alguns sobrecarga adicional para configurá-lo dentro do resto do applicaion (que pode também envolver uma carga ou mais montagens em memória). No final, um AppDomain vive em algum lugar entre uma linha e um processo.

Outras dicas

Eu faria referência-lo para o seu caso específico.

Se ele sair para ser caro, apenas pré-criar alguns deles, usar, então, conforme necessário e recriar novas em segundo plano para se certificar de que você sempre tem as não utilizadas suficientes esperando (um pouco como um pool de threads, mas você recriá-los cada vez para liberar a memória).

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