Recenze článků o reflexích:
O EMIT Review:
Nejprve vytvořte jednoduchý objekt, instancujte objekt a použijte emit a expression k přečtení a úpravě hodnoty objektu, a uvidíte, že výsledek vykonání je očekávaný, jak je znázorněno na obrázku níže:
Benchmark s využitím BenchmarkDotNet pro benchmarking, čtení pouze objektových hodnot pro testování, běžící na Net472 a NetCoreApp31, výsledky testu jsou následující:
Shrnutí:
Emit i expression jsou efektivnější než použití reflection pro získání hodnot, a v rámci .NET 4.7.2 je emit lepší než efektivita provádění expression, ale v .NET Core 3.1 je expression lepší než emisit execution.
Pokud váš program potřebuje dynamicky spustit objekt pouze jednou, doporučuje se použít reflexi (koneckonců není potřeba znovu zapouzdřit nebo vytvářet delegáta), a pokud váš program potřebuje dynamicky spouštět objekt vícekrát, doporučuje se použít emit nebo expression, a samozřejmě je potřeba další zapouzdření.
Testovací kód je následující:
Při použití Expression k získání hodnot objektů bude chyba hlášena následovně:
Výraz typu 'System.Int32' nelze použít pro návratový typ 'System.Object' Opravdu nevím, jak to tito lidé používají, umí jen kopírovat a vkládat!
|