Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 54151|Resposta: 3

[Fonte] Testes de desempenho de Reflexão, Emissão e Expressão .NET/C#

[Copiar link]
Postado em 2021-03-21 13:23:34 | | | |
Revisão de artigos sobre reflexões:

.net/c# aproveita o método de execução dinâmica por reflexão
https://www.itsvse.com/thread-4771-1-1.html

C# usa reflexão para determinar se uma propriedade é atribuída
https://www.itsvse.com/thread-3045-1-1.html

A reflexão C# recebe o nome de exibição da propriedade do objeto
https://www.itsvse.com/thread-3219-1-1.html
Sobre a Revisão do EMIT:

.NET/C# Emit gera montagens dinamicamente
https://www.itsvse.com/thread-9597-1-1.html
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:


.NET/C# usa BenchmarkDotNet para testar o desempenho do código
https://www.itsvse.com/thread-9576-1-1.html


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!




Anterior:.NET/C# Emit gera montagens dinamicamente
Próximo:O .NET Core chama soluções de erro de endereço gRPC HTTP (não protegido por TLS)
 Senhorio| Postado em 28-04-2025 14:53:41 |
Use o Expression para atribuir valores às propriedades do objeto:


Chamada:
 Senhorio| Postado em 28-04-2025 15:32:51 |
.NET/C# Use o UnsafeAccessor para modificar o conteúdo do campo somente leitura
https://www.itsvse.com/thread-10997-1-1.html
 Senhorio| Postado em 28-04-2025 15:40:57 |
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com