Revisão de artigos sobre reflexões:
Sobre a Revisão do EMIT:
Primeiro, crie um objeto simples, instencie o objeto e use emit e expression para ler e modificar o valor do objeto, e você pode ver que o resultado de execução é o esperado, como mostrado na figura abaixo:
Benchmark usando BenchmarkDotNet para benchmarking, lendo apenas valores de objetos para testes, rodando no Net472 e NetCoreApp31, os resultados do teste são os seguintes:
Resumo:
Tanto emit quanto expression são mais eficientes do que usar reflexão para obter valores, e sob o framework .NET 4.7.2, emit é melhor que eficiência de execução de expressões, mas sob o framework .NET Core 3.1, expression é melhor do que execução emit.
Se seu programa precisar executar dinamicamente um objeto apenas uma vez, recomenda-se usar reflexão (afinal, não há necessidade de encapsular novamente ou criar um delegado), e se seu programa precisar executar dinamicamente um objeto várias vezes, recomenda-se usar emit ou expression, e, claro, é necessário encapsulamento adicional.
O código do teste é o seguinte:
Ao usar Expression para obter valores de objetos, o erro será reportado da seguinte forma:
A expressão do tipo 'System.Int32' não pode ser usada para o tipo de retorno 'System.Object' Eu realmente não sei como essas pessoas usam, só sabem copiar e colar!
|