Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 54151|Răspunde: 3

[Sursă] .NET/C# Testarea performanței reflectării, emiterii și expresiei

[Copiază linkul]
Postat la 2021-3-21 13:23:34 | | | |
Recenzie a articolelor despre reflecții:

.net/c# profită de metoda de execuție dinamică prin reflexie
https://www.itsvse.com/thread-4771-1-1.html

C# folosește reflexia pentru a determina dacă o proprietate este atribuită
https://www.itsvse.com/thread-3045-1-1.html

Reflecția C# primește numele de afișare al proprietății obiectului
https://www.itsvse.com/thread-3219-1-1.html
Despre revizuirea EMIT:

.NET/C# Emit generează dinamic ansamblurile
https://www.itsvse.com/thread-9597-1-1.html
Mai întâi, creează un obiect simplu, instanțiază obiectul și folosește emit și expression pentru a citi și modifica valoarea obiectului, iar rezultatul de execuție este așa cum era de așteptat, așa cum se arată în figura de mai jos:



Benchmark folosind BenchmarkDotNet pentru benchmarking, citind doar valorile obiectelor pentru testare, rulând pe Net472 și NetCoreApp31, rezultatele testelor sunt următoarele:


.NET/C# folosește BenchmarkDotNet pentru a testa performanța codului
https://www.itsvse.com/thread-9576-1-1.html


Rezumat:

Atât emit, cât și expresie sunt mai eficiente decât folosirea reflexiei pentru a obține valori, iar în cadrul .NET 4.7.2, emit este mai bun decât eficiența execuției expresiilor, dar în cadrul .NET Core 3.1, expresia este mai bună decât execuția emit.

Dacă programul tău trebuie să execute dinamic un obiect o singură dată, se recomandă folosirea reflexiei (până la urmă, nu este nevoie să încapsulezi din nou sau să creezi un delegat), iar dacă programul tău trebuie să execute dinamic un obiect de mai multe ori, se recomandă să folosești emit sau expression, iar desigur, este necesară o încapsulare suplimentară.

Codul testului este următorul:

Când se folosește Expression pentru a obține valorile obiectului, eroarea va fi raportată astfel:

Expresia tipului 'System.Int32' nu poate fi folosită pentru returnarea tipului 'System.Object'
Chiar nu știu cum folosesc acești oameni, știu doar să copieze și să lipească!




Precedent:.NET/C# Emit generează dinamic ansamblurile
Următor:.NET Core apelează soluții gRPC HTTP (neprotejate TLS) de adrese
 Proprietarul| Postat la 28-04-2025 14:53:41 |
Folosește Expression pentru a atribui valori proprietăților obiectului:


Anunț:
 Proprietarul| Postat la 2025-4-28 15:32:51 |
.NET/C# Folosește UnsafeAccessor pentru a modifica conținutul câmpurilor doar în citire
https://www.itsvse.com/thread-10997-1-1.html
 Proprietarul| Postat la 28-04-2025 15:40:57 |
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com