Recenzia článkov o reflexiách:
O EMIT Review:
Najprv vytvorte jednoduchý objekt, inštancujte objekt a použite emit a expression na čítanie a úpravu hodnoty objektu, pričom uvidíte, že výsledok vykonania je očakávaný, ako je znázornené na obrázku nižšie:
Benchmark používajúci BenchmarkDotNet na benchmarking, čítanie iba objektových hodnôt na testovanie, bežiaci na Net472 a NetCoreApp31, výsledky testu sú nasledovné:
Súhrn:
Emit aj expression sú efektívnejšie ako použitie reflection na získanie hodnôt a v .NET 4.7.2 frameworku je emit lepší ako efektivita vykonávania expression, ale v .NET Core 3.1 frameworku je expression lepšie ako emit execution.
Ak váš program potrebuje dynamicky vykonať objekt iba raz, odporúča sa použiť reflection (napokon, nie je potrebné znovu zapuzdrovať alebo vytvárať delegáta), a ak váš program potrebuje dynamicky vykonávať objekt viackrát, odporúča sa použiť emit alebo expression, a samozrejme je potrebná ďalšia enkapsulácia.
Testovací kód je nasledovný:
Pri použití Expression na získanie hodnôt objektov sa chyba hlási nasledovne:
Výraz typu 'System.Int32' nemôže byť použitý pre návratový typ 'System.Object' Naozaj neviem, ako to títo ľudia používajú, vedia len kopírovať a vkladať!
|