Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 54151|Отговор: 3

[Източник] .NET/C# Рефлексия, излъчване, тестване на производителността на експресия

[Копирай линк]
Публикувано на 21.03.2021 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# отражението получава displayname на свойството на обекта
https://www.itsvse.com/thread-3219-1-1.html
За EMIT Review:

.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


Резюме:

И емит, и изразяване са по-ефективни от използването на отражение за получаване на стойности, а под .NET 4.7.2 фреймуърка емит е по-добър от ефективността на изпълнение на изрази, но при .NET Core 3.1 рамката изразяването е по-добро от изпълнението на емит.

Ако програмата ви трябва да изпълни обект динамично само веднъж, препоръчва се да използвате отражение (в крайна сметка няма нужда да се капсулира отново или да се създава делегат), а ако програмата трябва динамично да изпълнява обект няколко пъти, препоръчително е да се използва emit или expression, и разбира се, е необходима допълнителна капсулация.

Тестовият код е следният:

При използване на Expression за получаване на стойности на обекта, грешката ще бъде докладвана по следния начин:

Израз от тип 'System.Int32' не може да се използва за връщане тип 'System.Object'
Наистина не знам как тези хора го използват, те знаят само как да копират и поставят!




Предишен:.NET/C# Емит динамично генерира асембли
Следващ:.NET Core извиква gRPC HTTP (незащитени от TLS) решения за грешки с адреси
 Хазяин| Публикувано на 28.04.2025 14:53:41 |
Използвайте Expression, за да присвоите стойности на свойствата на обекта:


Обаждане:
 Хазяин| Публикувано на 28.04.2025 15:32:51 |
.NET/C# Използвайте UnsafeAccessor за промяна на съдържанието на полета само за четене
https://www.itsvse.com/thread-10997-1-1.html
 Хазяин| Публикувано на 28.04.2025 15:40:57 |
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com