C# ta static constructor için performans değerlendirmesi: Microsoft ve birçok kod geliştirici static constructorların ciddi bir yük getirdiği konusunda uyarıyorlar. Static constructorlara aynı zamanda type initializer de denir, çünkü bunlar tiplere referans verirler, instancelara değil. Aşağıda C# dilinde static constructorlar için yapılan test bulunmaktadır. Hangisinin yararlı olduğuna karar verebilirsiniz.
Örnek
Aşağıda static contructoru bulunan ve bulunmayan olarak iki sınıf bulunmaktadır. Kullandığınız çoğu sınıfın static constructoru yoktur. Sonuca göre static constructorlar tipe her ulaştığınızda ciddi bir yavaşlamaya sebep oluyor.
Static Constructor a sahip bir class [C#]
/// /// Bu tip static constructora sahiptir.
///
static class HasStaticConstructor
{
/// /// Public field
/// public static int _test;
/// /// Static constructor public alanı initialize eder
/// static HasStaticConstructor()
{
_test = 1;
}
}
Static Constructoru olmayan bir class [C#]
/// /// Bu tip static constructora sahip değildir.
///
static class NoStaticConstructor
{
/// /// Public field initialize edilir
///
public static int _test = 1;
}
Benchmark (Karşılaştırmalı Test) notları
Döngü: 1000000000
Detaylar: _text alanı her döngüde erişilir.
Static constructor performans testi
Sınıf 1: Static constructoru olan
Zaman: 3208 ms
Sınıf 2: Static constructoru olmayan
Zaman: 319 ms
Özet
Static constructor kullanmak uygun olabilir, ama çok yavaşlar.Runtime bunları inline atamaları optimize edebildiği yolla optimize edecek kadar akıllı değil. Bazen lazy loading kullanmak uygun olabilir. ( Lazy Loading: bir değişkenin her erişildiğinde null kontrolü yapılıp eğer null ise initialize etmek).
1 yorum:
type initializer kavramını anlamakta zorlandığım esnada google aramasıyla bu sayfaya eriştim. hem anlamını, hem de static constructor kullanımının dezavantajını öğrendim sayenizde. iyi ki bu blog sayfasını oluşturmuşsunuz yıllar sonra bile büyük fayda sağlıyor. teşekkürler.
Yorum Gönder