Aracılığıyla paylaş


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çek 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 çeşitli LINQ ad alanlarındaki uzantı yöntemlerinde, örneğin System.Xml.Linq.Extensions, ertelenen yürütmeyi kapsamlı bir şekilde kullanır.

Ertelenmiş yürütme, yineleyici bloğu içinde kullanıldığında yield (C# Başvurusu) anahtar sözcüğü (deyimi biçiminde yield-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 tembel değerlendirme

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.

Ayrıca bakınız