Преглед на статии за размишления:
За EMIT Review:
Първо, създайте прост обект, инстанцирайте обекта и използвайте emit и expression, за да прочетете и промените стойността на обекта, и ще видите, че резултатът от изпълнението е такъв, какъвто се очаква, както е показано на фигурата по-долу:
Бенчмарк с използване на BenchmarkDotNet за бенчмаркинг, четене само на стойности на обекти за тестване, работещ върху Net472 и NetCoreApp31, резултатите от теста са следните:
Резюме:
И емит, и изразяване са по-ефективни от използването на отражение за получаване на стойности, а под .NET 4.7.2 фреймуърка емит е по-добър от ефективността на изпълнение на изрази, но при .NET Core 3.1 рамката изразяването е по-добро от изпълнението на емит.
Ако програмата ви трябва да изпълни обект динамично само веднъж, препоръчва се да използвате отражение (в крайна сметка няма нужда да се капсулира отново или да се създава делегат), а ако програмата трябва динамично да изпълнява обект няколко пъти, препоръчително е да се използва emit или expression, и разбира се, е необходима допълнителна капсулация.
Тестовият код е следният:
При използване на Expression за получаване на стойности на обекта, грешката ще бъде докладвана по следния начин:
Израз от тип 'System.Int32' не може да се използва за връщане тип 'System.Object' Наистина не знам как тези хора го използват, те знаят само как да копират и поставят!
|