Megosztás a következőn keresztül:


Halasztott végrehajtás és lusta kiértékelés (LINQ–XML)

A lekérdezési és tengelyműveleteket gyakran halasztott végrehajtással hajtják végre. Ez a cikk ismerteti a késleltetett végrehajtás követelményeit és előnyeit, valamint néhány megvalósítási szempontot.

Halasztott végrehajtás

A késleltetett végrehajtás azt jelenti, hogy egy kifejezés kiértékelése késleltetve lesz, amíg a realizált értékre ténylegesen szükség nem lesz. A késleltetett végrehajtás nagy mértékben javíthatja a teljesítményt, ha nagy adatgyűjteményeket kell manipulálnia, különösen olyan programokban, amelyek láncolt lekérdezéseket vagy manipulációkat tartalmaznak. A legjobb esetben a késleltetett végrehajtás csak egyetlen iterációt tesz lehetővé a forrásgyűjteményen keresztül.

A LINQ-technológiák széles körben használják a késleltetett végrehajtást az alaposztályok System.Linq tagjaiban és a különböző LINQ-névterek bővítménymetóriáiban, például System.Xml.Linq.Extensions.

A halasztott végrehajtást közvetlenül a C# nyelven támogatja a hozam (C# referencia) kulcsszó (az yield-return utasítás formájában), ha iterátorblokkban használják. Az ilyen iterátornak típusgyűjteményt IEnumerator vagy IEnumerator<T> (vagy származtatott típust) kell visszaadnia.

Buzgó és lusta kiértékelés

Ha halasztott végrehajtást megvalósító metódust ír, azt is el kell döntenie, hogy lusta kiértékeléssel vagy lelkes kiértékeléssel valósítja-e meg a metódust.

  • A lusta kiértékelés során a forrásgyűjtemény egyetlen eleme lesz feldolgozva az iterátor minden egyes hívása során. Ez az iterátorok implementálásának tipikus módja.
  • A lelkes kiértékelés során az iterátor első hívása a teljes gyűjtemény feldolgozását eredményezi. Szükség lehet a forrásgyűjtemény ideiglenes másolatára is. A metódusnak például OrderBy az első elem visszaadása előtt rendeznie kell a teljes gyűjteményt.

A lusta kiértékelés általában jobb teljesítményt nyújt, mivel egyenletesen osztja el a többletterhelés-feldolgozást a gyűjtemény kiértékelése során, és minimalizálja az ideiglenes adatok használatát. Bizonyos műveletek esetében természetesen nincs más lehetőség, mint a köztes eredmények megvalósulása.

Halasztott végrehajtási példa a C# és a Visual Basic programozási halasztott végrehajtására.

Lásd még