Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 54151|Respuesta: 3

[Fuente] Pruebas de rendimiento de la reflexión, emisión y expresión .NET/C#

[Copiar enlace]
Publicado el 2021-3-21 13:23:34 | | | |
Revisión de artículos sobre reflexiones:

.net/c# aprovecha el método de ejecución dinámica de reflexión
https://www.itsvse.com/thread-4771-1-1.html

C# utiliza la reflexión para determinar si se asigna una propiedad
https://www.itsvse.com/thread-3045-1-1.html

La reflexión en C# obtiene el nombre de visualización de la propiedad del objeto
https://www.itsvse.com/thread-3219-1-1.html
Acerca de la revisión de EMIT:

.NET/C# Emit genera ensamblajes dinámicamente
https://www.itsvse.com/thread-9597-1-1.html
Primero, crea un objeto simple, instancia el objeto y usa emit y expression para leer y modificar el valor del objeto, y puedes ver que el resultado de ejecución es el esperado, como se muestra en la figura de abajo:



Benchmark usando BenchmarkDotNet para benchmarking, leyendo solo valores de objetos para pruebas, ejecutándose en Net472 y NetCoreApp31, los resultados de la prueba son los siguientes:


.NET/C# utiliza BenchmarkDotNet para probar el rendimiento del código
https://www.itsvse.com/thread-9576-1-1.html


Resumen:

Tanto emit como expression son más eficientes que usar reflection para obtener valores, y bajo el marco .NET 4.7.2, emit es mejor que la eficiencia de ejecución de expresión, pero bajo el framework .NET Core 3.1, expression es mejor que emit execution.

Si tu programa solo necesita ejecutar dinámicamente un objeto una vez, se recomienda usar reflexión (al fin y al cabo, no es necesario encapsular de nuevo ni crear un delegado), y si tu programa necesita ejecutar dinámicamente un objeto varias veces, se recomienda usar emit o expression, y por supuesto, se requiere encapsulación adicional.

El código de prueba es el siguiente:

Al usar Expresión para obtener valores de objetos, el error se reportará de la siguiente manera:

La expresión del tipo 'System.Int32' no puede usarse para el tipo de retorno 'System.Object'
Realmente no sé cómo lo usan estas personas, ¡solo saben copiar y pegar!




Anterior:.NET/C# Emit genera ensamblajes dinámicamente
Próximo:.NET Core llama a soluciones de error de dirección gRPC HTTP (no protegidas por TLS)
 Propietario| Publicado el 28-4-2025 14:53:41 |
Usa Expresión para asignar valores a las propiedades del objeto:


Llamada:
 Propietario| Publicado el 28-4-2025 15:32:51 |
.NET/C# Usa UnsafeAccessor para modificar el contenido de campos de solo lectura
https://www.itsvse.com/thread-10997-1-1.html
 Propietario| Publicado el 28-4-2025 15:40:57 |
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com