Überblick über Artikel über Reflexionen:
Über die EMIT-Rezension:
Zuerst erstellen Sie ein einfaches Objekt, instanziieren das Objekt und verwenden Sie Emit und Expression, um den Wert des Objekts zu lesen und zu ändern, und Sie können sehen, dass das Ausführungsergebnis wie erwartet ist, wie in der Abbildung unten gezeigt:
Benchmark mit BenchmarkDotNet für Benchmarking, wobei nur Objektwerte zum Testen gelesen werden, ausgeführt auf Net472 und NetCoreApp31, die Testergebnisse sind wie folgt:
Zusammenfassung:
Sowohl Emit als auch Expression sind effizienter als die Verwendung von Reflexion zum Erhalten von Werten, und im .NET 4.7.2-Framework ist Emit besser als die Ausführungseffizienz des Ausdrucks, aber unter dem .NET Core 3.1-Framework ist Ausdruck besser als Ausführung.
Wenn Ihr Programm ein Objekt nur einmal dynamisch ausführen muss, wird empfohlen, Reflection zu verwenden (schließlich ist es nicht nötig, erneut zu kapseln oder einen Delegate zu erstellen), und wenn Ihr Programm ein Objekt mehrfach dynamisch ausführen muss, wird empfohlen, Emit oder Expression zu verwenden, und natürlich ist eine weitere Kapselung erforderlich.
Der Testcode ist wie folgt:
Wenn Expression verwendet wird, um Objektwerte zu erhalten, wird der Fehler wie folgt gemeldet:
Der Ausdruck des Typs 'System.Int32' kann nicht für den Rückgabetyp 'System.Object' verwendet werden Ich weiß wirklich nicht, wie diese Leute das benutzen, sie können nur kopieren und einfügen!
|