Przegląd artykułów o refleksjach:
O EMIT Review:
Najpierw stwórz prosty obiekt, instancjonuj go i użyj emit oraz expression do odczytu i modyfikacji wartości obiektu, a zobaczysz, że wynik wykonania jest taki jak oczekiwano, jak pokazano na poniższym rysunku:
Benchmark z użyciem BenchmarkDotNet do benchmarkingu, odczyt wyłącznie wartości obiektów do testowania, uruchamianie na Net472 i NetCoreApp31, wyniki testów są następujące:
Streszczenie:
Zarówno emit, jak i expression są bardziej wydajne niż używanie odbicia do uzyskania wartości, a w ramach .NET 4.7.2 emit jest lepszy niż efektywność wykonywania wyrażeń, ale w .NET Core 3.1 wyrażenie jest lepsze niż wykonanie emit.
Jeśli Twój program musi dynamicznie wykonać obiekt tylko raz, zaleca się użycie refleksji (w końcu nie ma potrzeby ponownego enkapsulowania ani tworzenia delegata), a jeśli program musi dynamicznie wykonać obiekt wielokrotnie, zaleca się użycie emit lub expression, a oczywiście wymagana jest dalsza enkapsulacja.
Kod testu jest następujący:
Przy użyciu Expression, aby uzyskać wartości obiektów, błąd będzie raportowany w następujący sposób:
Wyrażenie typu 'System.Int32' nie może być użyte do zwrotu typu 'System.Object' Naprawdę nie wiem, jak ci ludzie z tego korzystają, oni potrafią tylko kopiować i wklejać!
|