Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 54151|Odpowiedź: 3

[Źródło] .NET/C# Testowanie wydajności odbicia, emitowania, ekspresji

[Skopiuj link]
Opublikowano 2021-3-21 13:23:34 | | | |
Przegląd artykułów o refleksjach:

.NET/C# wykorzystuje metodę dynamicznego wykonania odbicia
https://www.itsvse.com/thread-4771-1-1.html

C# wykorzystuje odbicie do określenia, czy przypisana jest właściwość
https://www.itsvse.com/thread-3045-1-1.html

Odbicie C# otrzymuje nazwę wyświetlania właściwości obiektu
https://www.itsvse.com/thread-3219-1-1.html
O EMIT Review:

.NET/C# Emit generuje dynamicznie asemblery
https://www.itsvse.com/thread-9597-1-1.html
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:


.NET/C# wykorzystuje BenchmarkDotNet do testowania wydajności kodu
https://www.itsvse.com/thread-9576-1-1.html


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ć!




Poprzedni:.NET/C# Emit generuje dynamicznie asemblery
Następny:.NET Core nazywa gRPC HTTP (non-TLS protected) rozwiązaniami błędów adresowych
 Ziemianin| Opublikowano 2025-4-28 14:53:41 |
Użyj Expression, aby przypisać wartości właściwościom obiektu:


Rozmow:
 Ziemianin| Opublikowano 2025-4-28 15:32:51 |
.NET/C# Użyj UnsafeAccessor do modyfikacji zawartości pola tylko do odczytu
https://www.itsvse.com/thread-10997-1-1.html
 Ziemianin| Opublikowano 2025-4-28 15:40:57 |
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com