Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 54151|Відповідь: 3

[Джерело] .NET/C# Тестування продуктивності відображення, випромінювання, експресії

[Копіювати посилання]
Опубліковано 2021-3-21 13:23:34 | | | |
Огляд статей про рефлексії:

.net/c# використовує метод динамічного виконання відображення
https://www.itsvse.com/thread-4771-1-1.html

C# використовує відображення для визначення, чи присвоєна властивість
https://www.itsvse.com/thread-3045-1-1.html

Відображення C# отримує ім'я відображення властивості об'єкта
https://www.itsvse.com/thread-3219-1-1.html
Про огляд EMIT:

.NET/C# Еміт динамічно генерує асемблі
https://www.itsvse.com/thread-9597-1-1.html
Спочатку створіть простий об'єкт, створіть його і використайте emit та expression для читання та зміни значення об'єкта, і ви побачите, що результат виконання відповідає очікуванням, як показано на рисунку нижче:



Бенчмарк із використанням BenchmarkDotNet для бенчмаркінгу, читання лише значення об'єктів для тестування, працює на Net472 та NetCoreApp31, результати тесту такі:


.NET/C# використовує BenchmarkDotNet для тестування продуктивності коду
https://www.itsvse.com/thread-9576-1-1.html


Зведення:

І emit, і expression ефективніші, ніж використання рефлексії для отримання значень, і в фреймворку .NET 4.7.2 емістрація краща за ефективність виконання виразів, але в фреймворку .NET Core 3.1 вираз кращий за виконання emit.

Якщо вашій програмі потрібно динамічно виконати об'єкт лише один раз, рекомендується використовувати reflection (адже немає потреби інкапсулювати знову або створювати делегат), а якщо програмі потрібно динамічно виконувати об'єкт кілька разів, рекомендується використовувати emit або expression, і, звичайно, потрібна додаткова інкапсуляція.

Тестовий код виглядає так:

При використанні Expression для отримання значень об'єктів помилка буде подана наступним чином:

Вираз типу 'System.Int32' не може використовуватися для повернення типу 'System.Object'
Я справді не знаю, як ці люди ним користуються, вони лише вміють копіювати і вставляти!




Попередній:.NET/C# Еміт динамічно генерує асемблі
Наступний:.NET Core викликає рішення помилок адреси gRPC HTTP (не захищені TLS)
 Орендодавець| Опубліковано 2025-4-28 14:53:41 |
Використовуйте Expression для присвоєння значень властивостей об'єкта:


Дзвінок:
 Орендодавець| Опубліковано 2025-4-28 15:32:51 |
.NET/C# Використовуйте UnsafeAccessor для зміни вмісту полів лише для читання
https://www.itsvse.com/thread-10997-1-1.html
 Орендодавець| Опубліковано 2025-4-28 15:40:57 |
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com