Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 54151|Svar: 3

[Källa] .NET/C# Reflektion, Emitt, Uttrycksprestandatestning

[Kopiera länk]
Publicerad den 2021-3-21 13:23:34 | | | |
Översikt av artiklar om reflektioner:

.net/c# utnyttjar metoden reflection dynamic execution
https://www.itsvse.com/thread-4771-1-1.html

C# använder reflektion för att avgöra om en egenskap tilldelas
https://www.itsvse.com/thread-3045-1-1.html

C#-reflektionen får visningsnamnet för objektegenskapen
https://www.itsvse.com/thread-3219-1-1.html
Om EMIT-recensionen:

.NET/C# Emittera dynamiskt genererar assemblies
https://www.itsvse.com/thread-9597-1-1.html
Skapa först ett enkelt objekt, instansiera objektet och använd emit och expression för att läsa och ändra objektets värde, och du kan se att exekveringsresultatet är som förväntat, som visas i figuren nedan:



Benchmark med BenchmarkDotNet för benchmarking, endast objektvärden för testning, körande på Net472 och NetCoreApp31, testresultaten är följande:


.NET/C# använder BenchmarkDotNet för att testa kodprestanda
https://www.itsvse.com/thread-9576-1-1.html


Sammanfattning:

Både emit och uttryck är mer effektiva än att använda reflektion för att få värden, och under .NET 4.7.2-ramverket är emit bättre än exekveringseffektivitet för uttryck, men under .NET Core 3.1-ramverket är uttryck bättre än emitt-exekvering.

Om ditt program bara behöver köra ett objekt dynamiskt en gång rekommenderas det att använda reflektion (det finns ju trots allt inget behov av att kapsla in igen eller skapa en delegat), och om ditt program behöver köra ett objekt dynamiskt flera gånger rekommenderas det att använda emit eller expression, och naturligtvis krävs ytterligare inkapsling.

Testkoden är följande:

När man använder Expression för att erhålla objektvärden rapporteras felet enligt följande:

Uttryck av typen 'System.Int32' kan inte användas för returtypen 'System.Object'
Jag förstår verkligen inte hur de här personerna använder det, de kan bara kopiera och klistra in!




Föregående:.NET/C# Emittera dynamiskt genererar assemblies
Nästa:.NET Core anropar gRPC HTTP (icke-TLS-skyddade) adressfellösningar
 Hyresvärd| Publicerad den 28 april 2025 14:53:41 |
Använd Expression för att tilldela värden till objektegenskaper:


Ring:
 Hyresvärd| Publicerad den 28-4-2025 15:32:51 |
.NET/C# Använd UnsafeAccessor för att ändra innehållet i skrivskyddade fält
https://www.itsvse.com/thread-10997-1-1.html
 Hyresvärd| Publicerad den 28 april 2025 15:40:57 |
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com