Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
Szorgalmas é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 halasztott végrehajtásának programozási példájára.