Обзор статей о размышлениях:
О обзоре EMIT:
Сначала создайте простой объект, создайте объект и используйте emit и expression для чтения и изменения значения объекта, и вы увидите, что результат выполнения соответствует ожидаемому, как показано на рисунке ниже:
Бенчмаркинг с использованием BenchmarkDotNet для анализа только объектных значений для тестирования, работает на Net472 и NetCoreApp31, результаты теста следующие:
Сводка:
И эмит, и выражение эффективнее, чем использование отражения для получения значений, и в фреймворке .NET 4.7.2 эмит лучше эффективности выполнения выражений, но в фреймворке .NET Core 3.1 выражение лучше, чем исполнение эмит.
Если вашей программе нужно динамически выполнять объект только один раз, рекомендуется использовать отражение (в конце концов, нет необходимости снова инкапсулировать или создавать делегата), а если нужно динамически выполнять объект несколько раз, рекомендуется использовать emit или expression, и, конечно, требуется дополнительная инкапсуляция.
Тестовый код следующий:
При использовании Expression для получения значений объектов ошибка будет отображаться следующим образом:
Выражение типа 'System.Int32' не может использоваться для возвратного типа 'System.Object' Я правда не понимаю, как эти люди ими пользуются, они только умеют копировать и вставлять!
|