Revisión de artículos sobre reflexiones:
Acerca de la revisión de EMIT:
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:
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!
|