Recenzie a articolelor despre reflecții:
Despre revizuirea EMIT:
Mai întâi, creează un obiect simplu, instanțiază obiectul și folosește emit și expression pentru a citi și modifica valoarea obiectului, iar rezultatul de execuție este așa cum era de așteptat, așa cum se arată în figura de mai jos:
Benchmark folosind BenchmarkDotNet pentru benchmarking, citind doar valorile obiectelor pentru testare, rulând pe Net472 și NetCoreApp31, rezultatele testelor sunt următoarele:
Rezumat:
Atât emit, cât și expresie sunt mai eficiente decât folosirea reflexiei pentru a obține valori, iar în cadrul .NET 4.7.2, emit este mai bun decât eficiența execuției expresiilor, dar în cadrul .NET Core 3.1, expresia este mai bună decât execuția emit.
Dacă programul tău trebuie să execute dinamic un obiect o singură dată, se recomandă folosirea reflexiei (până la urmă, nu este nevoie să încapsulezi din nou sau să creezi un delegat), iar dacă programul tău trebuie să execute dinamic un obiect de mai multe ori, se recomandă să folosești emit sau expression, iar desigur, este necesară o încapsulare suplimentară.
Codul testului este următorul:
Când se folosește Expression pentru a obține valorile obiectului, eroarea va fi raportată astfel:
Expresia tipului 'System.Int32' nu poate fi folosită pentru returnarea tipului 'System.Object' Chiar nu știu cum folosesc acești oameni, știu doar să copieze și să lipească!
|