Gennemgang af artikler om refleksioner:
Om EMIT-anmeldelsen:
Først opretter du et simpelt objekt, instansierer objektet, og bruger emit og udtryk til at læse og ændre objektets værdi, og du kan se, at eksekveringsresultatet er som forventet, som vist i figuren nedenfor:
Benchmark med BenchmarkDotNet til benchmarking, kun læsning af objektværdier til test, kørende på Net472 og NetCoreApp31, testresultaterne er som følger:
Resumé:
Både emit og udtryk er mere effektive end at bruge refleksion til at hente værdier, og under .NET 4.7.2-rammen er emit bedre end udtryksudførelseseffektivitet, men under .NET Core 3.1-rammen er udtryk bedre end emitt-udførelse.
Hvis dit program kun behøver at udføre et objekt dynamisk én gang, anbefales det at bruge reflection (der er trods alt ikke behov for at indkapsle igen eller oprette en delegeret), og hvis dit program skal udføre et objekt dynamisk flere gange, anbefales det at bruge emit eller expression, og selvfølgelig kræves yderligere indkapsling.
Testkoden er som følger:
Når man bruger Expression til at opnå objektværdier, rapporteres fejlen som følger:
Udtryk af typen 'System.Int32' kan ikke bruges til returtypen 'System.Object' Jeg ved virkelig ikke, hvordan de her folk bruger det, de kan kun kopiere og indsætte!
|