Ertelenmiş yürütme ve geç 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çıklanmıştır.

Ertelenmiş yürütme

Ertelenmiş yürütme, bir ifadenin değerlendirilmesi, gerçekleştirildi değeri gerçekten gerekli olana kadar geciktirilir. Ertelenmiş yürütme, özellikle bir dizi zincirlenmiş sorgu veya işleme içeren programlarda büyük veri koleksiyonlarını işlemeye gerek olduğunda performansı önemli ölçüde geliştirebilir. En iyi durumda, ertelenmiş yürütme kaynak koleksiyon aracılığıyla yalnızca tek bir yinelemeyi sağlar.

LINQ teknolojileri, hem çekirdek sınıfların üyelerinde hem de gibi çeşitli LINQ ad alanlarındaki genişletme yöntemlerinde ertelenen yürütmeyi kapsamlı System.Linq olarak System.Xml.Linq.Extensions kullanır.

Ertelenmiş yürütme, bir iterator bloğu içinde kullanılırken yield (C# Başvurusu) anahtar sözcüğü (deyiminin şeklinde) tarafından doğrudan C# yield-return dilinde de desteklemektedir. Bu tür bir tekrarlayıcı, veya türünde (veya türetilmiş IEnumerator bir IEnumerator<T> tür) koleksiyonun dönüşe sahip olması gerekir.

İstekli ve yavaş değerlendirme karşılaştırması

Ertelenmiş yürütme uygulayan bir yöntem yazarak yöntemin yavaş değerlendirme mi yoksa istekli değerlendirme mi uygulanıp uygulanmaycazı da karar verebilirsiniz.

  • Yavaş değerlendirmede, kaynak koleksiyonun tek bir öğesi, her bir iterator çağrısı sırasında işlenir. Bu, iteratörlerin tipik bir şekilde uygulanmasıdır.
  • İstekli değerlendirmede, iterator'a yapılan ilk çağrı koleksiyonun tamamının işlenmesine neden olur. Kaynak koleksiyonun geçici bir kopyası da gerekli olabilir. Örneğin yönteminin OrderBy ilk öğeyi döndürmeden önce koleksiyonun tamamını sıralaması gerekir.

Yavaş değerlendirme genellikle daha iyi performans sunar çünkü ek yükü işlemeyi koleksiyonun değerlendirmesi boyunca eşit dağıtır ve geçici verilerin kullanımını en aza indirir. Elbette bazı işlemler için ara sonuçları elde etmekten başka bir seçenek yoktur.

C# dilinde programlamada ertelenen yürütme örneği için bkz. Ertelenmiş yürütme Visual Basic.

Ayrıca bkz.