Recensie van artikelen over reflecties:
Over EMIT Review:
Maak eerst een eenvoudig object, instantieer het object, en gebruik emit en expression om de waarde van het object te lezen en aan te passen, en je ziet dat het uitvoeringsresultaat is zoals verwacht, zoals te zien is in de onderstaande figuur:
Benchmark met BenchmarkDotNet voor benchmarking, alleen objectwaarden lezen voor testen, draaien op Net472 en NetCoreApp31, de testresultaten zijn als volgt:
Samenvatting:
Zowel emit als expression zijn efficiënter dan het gebruik van reflectie om waarden te verkrijgen, en onder het .NET 4.7.2-framework is emit beter dan expression-uitvoeringsefficiëntie, maar onder het .NET Core 3.1-framework is expressie beter dan emitt-uitvoering.
Als je programma een object slechts één keer dynamisch hoeft uit te voeren, wordt aangeraden om reflectie te gebruiken (er is tenslotte geen noodzaak om opnieuw te encapsuleren of een delegate aan te maken), en als je programma een object meerdere keren dynamisch moet uitvoeren, wordt aanbevolen om emit of expressie te gebruiken, en natuurlijk is verdere encapsulatie nodig.
De testcode is als volgt:
Bij het gebruik van Expression om objectwaarden te verkrijgen, wordt de fout als volgt gerapporteerd:
Expressie van het type 'System.Int32' kan niet worden gebruikt voor het retourtype 'System.Object' Ik weet echt niet hoe deze mensen het gebruiken, ze weten alleen hoe ze moeten kopiëren en plakken!
|