Pregled člankov o razmišljanjih:
O EMIT Review:
Najprej ustvarite preprost objekt, ga instancirajte in uporabite emit in expression za branje ter spreminjanje vrednosti objekta, in lahko vidite, da je rezultat izvedbe tak, kot je pričakovano, kot je prikazano na spodnji sliki:
Benchmark z uporabo BenchmarkDotNet za testiranje, branje le vrednosti objektov za testiranje, ki teče na Net472 in NetCoreApp31, rezultati testa so naslednji:
Povzetek:
Tako emit kot izraz sta učinkovitejša kot uporaba refleksije za pridobivanje vrednosti, in v okviru .NET 4.7.2 je emit boljši kot učinkovitost izvajanja izraza, vendar je v .NET Core 3.1 okviru izraz boljši od izvajanja emit.
Če vaš program potrebuje dinamično izvedbo objekta le enkrat, je priporočljivo uporabiti reflection (navsezadnje ni potrebe po ponovnem enkapsuliranju ali ustvarjanju delegata), in če mora vaš program dinamično izvesti objekt večkrat, je priporočljivo uporabiti emit ali expression, seveda pa je potrebna nadaljnja enkapsulacija.
Testna koda je naslednja:
Pri uporabi izraza za pridobitev vrednosti objektov bo napaka prikazana takole:
Izraza tipa 'System.Int32' ni mogoče uporabiti za vrnjeni tip 'System.Object' Res ne vem, kako ti ljudje to uporabljajo, znajo le kopirati in prilepiti!
|