Arvostelu artikkeleista pohdinnasta:
Tietoa EMIT-arvostelusta:
Ensiksi luo yksinkertainen olio, instanssi objekti ja käytä emit- ja lauseketta lukeaksesi ja muuttaaksesi objektin arvoa, ja näet, että suoritustulos on odotettu kuten alla olevassa kuvassa näkyy:
Benchmark käyttää BenchmarkDotNetiä vertailuun, lukee vain objektiarvoja testaukseen, toimii Net472:lla ja NetCoreApp31:llä, testitulokset ovat seuraavat:
Yhteenveto:
Sekä emit että lauseke ovat tehokkaampia kuin heijastuksen käyttö arvojen saamiseksi, ja .NET 4.7.2 -kehyksessä emit on parempi kuin lausekkeen suoritustehokkuus, mutta .NET Core 3.1 -kehyksessä lauseke on parempi kuin emit-suoritus.
Jos ohjelmasi tarvitsee dynaamisesti suorittaa objektin vain kerran, suositellaan heijastusta (loppujen lopuksi ei tarvitse kapseloida uudelleen tai luoda delegaattia), ja jos ohjelmasi tarvitsee suorittaa objektia dynaamisesti useita kertoja, suositellaan emitteriä tai ilmaisutoimintoja, ja tietenkin lisäkapselointi on tarpeen.
Testikoodi on seuraava:
Kun käytetään Expressionia objektiarvojen saamiseksi, virhe raportoidaan seuraavasti:
Tyypin 'System.Int32' lauseketta ei voi käyttää palautustyypille 'System.Object' En oikeasti tiedä, miten nämä ihmiset käyttävät sitä, he osaavat vain kopioida ja liittää sen!
|