Ertelenmiş yürütme ve gecikmeli değerlendirme (LINQ to XML)
Sorgu ve eksen işlemleri genellikle ertelenmiş yürütmeyi kullanmak için uygulanır. Bu makalede ertelenen yürütmenin gereksinimleri ve avantajları ve bazı uygulama konuları açıklanmaktadır.
Ertelenmiş yürütme
Ertelenmiş yürütme, bir ifadenin değerlendirmesinin, gerçekleştirilmiş değeri gerçekten gerekli olana kadar ertelendiği anlamına gelir. Ertelenmiş yürütme, özellikle zincirlenmiş sorgular veya işlemeler içeren programlarda büyük veri koleksiyonlarını işlemeniz gerektiğinde performansı büyük ölçüde iyileştirebilir. En iyi durumda, ertelenen yürütme kaynak koleksiyon aracılığıyla yalnızca tek bir yinelemeyi etkinleştirir.
LINQ teknolojileri, hem çekirdek System.Linq sınıfların üyelerinde hem de gibi çeşitli LINQ ad alanlarındaki uzantı yöntemlerinde ertelenen yürütmeyi kapsamlı bir şekilde System.Xml.Linq.Extensionskullanır.
Ertelenmiş yürütme, yineleyici bloğu içinde kullanıldığında yield (C# Başvurusu) anahtar sözcüğü (deyimi biçimindeyield-return
) tarafından doğrudan C# dilinde desteklenir. Böyle bir yineleyici bir tür IEnumerator veya IEnumerator<T> (veya türetilmiş tür) koleksiyonu döndürmelidir.
İstekli ve gecikmeli değerlendirme karşılaştırması
Ertelenmiş yürütme uygulayan bir yöntem yazdığınızda, gecikmeli değerlendirme veya istekli değerlendirme kullanarak yöntemin uygulanıp uygulanmayacağına da karar vermeniz gerekir.
- Gecikmeli değerlendirmede, yineleyiciye yapılan her çağrı sırasında kaynak koleksiyonun tek bir öğesi işlenir. Yineleyicilerin uygulandığı tipik yöntem budur.
- İstekli değerlendirmede, yineleyiciye yapılan ilk çağrı koleksiyonun tamamının işlenmesine neden olur. Kaynak koleksiyonun geçici bir kopyası da gerekebilir. Örneğin, yöntemin OrderBy ilk öğeyi döndürmeden önce koleksiyonun tamamını sıralaması gerekir.
Yavaş değerlendirme genellikle daha iyi performans sağlar çünkü toplamanın değerlendirmesi boyunca ek yük işlemeyi eşit olarak dağıtır ve geçici verilerin kullanımını en aza indirir. Elbette bazı işlemler için ara sonuçların gerçekleştirilmesinden başka bir seçenek yoktur.
C# ve Visual Basic'te ertelenmiş yürütme programlama örneği için bkz . Ertelenen yürütme örneği .