Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 54151|Antwoord: 3

[Bron] .NET/C# Reflectie-, Emit- en Expressieprestatietests

[Link kopiëren]
Geplaatst op 21-3-2021 13:23:34 | | | |
Recensie van artikelen over reflecties:

.net/c# maakt gebruik van de reflectiedynamische uitvoeringsmethode
https://www.itsvse.com/thread-4771-1-1.html

C# gebruikt reflectie om te bepalen of een eigenschap wordt toegewezen
https://www.itsvse.com/thread-3045-1-1.html

C#-reflectie krijgt de weergavenaam van de objecteigenschap
https://www.itsvse.com/thread-3219-1-1.html
Over EMIT Review:

.NET/C# Emitteert dynamisch assemblies
https://www.itsvse.com/thread-9597-1-1.html
Maak eerst een eenvoudig object, instantieer het object, en gebruik emit en expression om de waarde van het object te lezen en aan te passen, en je ziet dat het uitvoeringsresultaat is zoals verwacht, zoals te zien is in de onderstaande figuur:



Benchmark met BenchmarkDotNet voor benchmarking, alleen objectwaarden lezen voor testen, draaien op Net472 en NetCoreApp31, de testresultaten zijn als volgt:


.NET/C# gebruikt BenchmarkDotNet om codeprestaties te testen
https://www.itsvse.com/thread-9576-1-1.html


Samenvatting:

Zowel emit als expression zijn efficiënter dan het gebruik van reflectie om waarden te verkrijgen, en onder het .NET 4.7.2-framework is emit beter dan expression-uitvoeringsefficiëntie, maar onder het .NET Core 3.1-framework is expressie beter dan emitt-uitvoering.

Als je programma een object slechts één keer dynamisch hoeft uit te voeren, wordt aangeraden om reflectie te gebruiken (er is tenslotte geen noodzaak om opnieuw te encapsuleren of een delegate aan te maken), en als je programma een object meerdere keren dynamisch moet uitvoeren, wordt aanbevolen om emit of expressie te gebruiken, en natuurlijk is verdere encapsulatie nodig.

De testcode is als volgt:

Bij het gebruik van Expression om objectwaarden te verkrijgen, wordt de fout als volgt gerapporteerd:

Expressie van het type 'System.Int32' kan niet worden gebruikt voor het retourtype 'System.Object'
Ik weet echt niet hoe deze mensen het gebruiken, ze weten alleen hoe ze moeten kopiëren en plakken!




Vorig:.NET/C# Emitteert dynamisch assemblies
Volgend:.NET Core-aanroepen gRPC HTTP (niet-TLS protected) adresfoutoplossingen
 Huisbaas| Geplaatst op 28-4-2025 14:53:41 |
Gebruik Expression om waarden toe te wijzen aan objecteigenschappen:


Call:
 Huisbaas| Geplaatst op 28-4-2025 15:32:51 |
.NET/C# Gebruik UnsafeAccessor om de inhoud van alleen-lezen velden te wijzigen
https://www.itsvse.com/thread-10997-1-1.html
 Huisbaas| Geplaatst op 28-4-2025 15:40:57 |
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com