Revue des articles sur les réflexions :
À propos de l’examen EMIT :
D’abord, créez un objet simple, instanciez l’objet, puis utilisez emit et expression pour lire et modifier la valeur de l’objet, et vous verrez que le résultat d’exécution est attendu, comme montré dans la figure ci-dessous :
Benchmark utilisant BenchmarkDotNet pour le benchmarking, ne lisant que les valeurs d’objets pour les tests, fonctionnant sur Net472 et NetCoreApp31, les résultats du test sont les suivants :
Résumé:
Emit et expression sont tous deux plus efficaces que d’utiliser la réflexion pour obtenir des valeurs, et dans le cadre .NET 4.7.2, emit est meilleur que l’efficacité d’exécution d’expression, mais sous le framework .NET Core 3.1, expression est meilleure que l’exécution d’emit.
Si votre programme n’a besoin d’exécuter dynamiquement un objet qu’une seule fois, il est recommandé d’utiliser la réflexion (après tout, il n’est pas nécessaire d’encapsuler à nouveau ou de créer un délégué), et si votre programme doit exécuter dynamiquement un objet plusieurs fois, il est recommandé d’utiliser l’émission ou l’expression, et bien sûr, une encapsulation supplémentaire est nécessaire.
Le code de test est le suivant :
Lors de l’utilisation d’Expression pour obtenir les valeurs des objets, l’erreur sera rapportée comme suit :
L’expression du type 'System.Int32' ne peut pas être utilisée pour le type de retour 'System.Object' Je ne comprends vraiment pas comment ces gens l’utilisent, ils savent juste copier-coller !
|