Yansımalar üzerine makalelerin incelemesi:
EMIT İncelemesi Hakkında:
Öncelikle, basit bir nesne oluşturun, nesneyi örnekleyin ve emit ile ifade kullanarak nesnenin değerini okuyup değiştirin; böylece aşağıdaki şekilde gösterildiği gibi yürütme sonucunun beklendiği gibi olduğunu görebilirsiniz:
Benchmark için BenchmarkDotNet kullanarak, test için yalnızca nesne değerlerini okuyordu, Net472 ve NetCoreApp31 üzerinde çalışıyor, test sonuçları aşağıdaki gibidir:
Özet:
Hem emit hem de ifade, değer almak için yansıtmayı kullanmaktan daha verimlidir ve .NET 4.7.2 çerçevesinde emit, ifade yürütme verimliliğinden daha iyidir, ancak .NET Core 3.1 çerçevesinde ifade emit yürütmesinden daha iyidir.
Programınız bir nesneyi dinamik olarak sadece bir kez çalıştırmak zorunda kalıyorsa, yansıtma (sonuçta tekrar kapsüllemeye veya delege oluşturmaya gerek yok) önerilir, programınız bir nesneyi birden fazla kez dinamik olarak çalıştırması gerekiyorsa, emit veya ifade kullanımı önerilir ve tabii ki ek kapsülleme gereklidir.
Test kodu şu şekildedir:
Expression kullanılarak nesne değerleri elde edilirken, hata şu şekilde bildirilir:
'System.Int32' tipindeki ifade 'System.Object' dönüş tipi için kullanılamaz Bu insanların nasıl kullandığını gerçekten bilmiyorum, sadece kopyalayıp yapıştırmayı biliyorlar!
|