Net, módszerek () és a foreach ()
A módszer ()
A TPL adatpárhuzamosság fenntartása, különösen, alkalmazott módszer szerinti (), meghatározott párhuzamos osztályban. Ez a módszer létezik több formában. Ő megfontolás kezdjük a legegyszerűbb formában a következők:
ahol fromInclusive jelentése egy kezdeti értéket, amely megfelel a változó vezérlési ciklus; is nevezik egy iterációs, vagy index, érték; Egy toExclusive - értéket eggyel nagyobb, mint az utolsó. Minden lépésnél a ciklus a hurok változó értékét megnöveljük. Következésképpen, a ciklus előrehaladtával fokozatosan egy kezdeti értékről a végső értékre fromInclusive toExclusive mínusz egy.
A ciklikusan végrehajtható kód jelzi, hogy keresztül továbbított paraméter szervezetben. Ez a módszer összeegyeztethetőnek kell lennie a megbízott Action
A módszer Az () általános paraméter T kell lennie, természetesen, a típus int. Átadott érték paraméter obj lesz a következő érték a hurok kontroll változó. A módszer keresztül továbbított paraméter test, lehet nevezni, vagy anonim. A () módszer adja vissza egy példányát egy tárgy típusú ParallelLoopResult, állapotának leírásakor a ciklus. Egyszerű ciklus ezt az értéket el lehet hanyagolni.
A fő jellemzője a módszer (), hogy lehetővé teszi, amikor a lehetőség is rendelkezésre áll, a párhu- kódok végrehajtását a hurok. És ez viszont növelheti a termelékenységet. Például, az átalakítási folyamat a hurok tömb osztható részeit úgy, hogy a különböző részei a tömb transzformáltuk egyszerre. Azonban meg kell jegyezni, hogy a termelékenység növekedése nem garantálható, mivel a különbség a processzorok számának rendelkezésre a különböző végrehajtási környezetek, valamint annak a ténynek köszönhető, hogy a párhuzamosság a kis ciklusok is, hogy a költségek meghaladják a megtakarított idő.
A következő példa program használatát szemlélteti a módszer () a gyakorlatban. Kezdetben a program létrehoz egy sor adatot, amely a 1000000000 egészek. A () módszer ezután nevezik, ami MyTransform () módszer kerül átvitelre, mint egy „test” ciklusban. Ennek lényege, hogy a piaci szereplők végző tetszőleges konverziós adatok tömb. Ennek célja - szimulálni egy adott művelet. Amint azt az alábbiakban további, az üzemben tartó nem triviális, hogy adatpárhuzamosság hozott némi pozitív hatása. Ellenkező esetben a szekvenciális végrehajtási ciklus lehet kitölteni a gyorsabb:
Ez a program két ciklusban. Az első, egy szabványos, hurok inicializálja a tömböt adatokat. A második ciklusban párhuzamosan végrehajthatók For módszerrel (), az átalakítás kerül végrehajtásra minden egyes adat eleme a tömb. Amint fentebb említettük, ezt a konverziót önkényes, és a kiválasztott kizárólag demonstrációs célokra. A módszer () metódushívások automatikusan oszt MyTransform () egymástól a párhuzamos feldolgozás egyedi darab tárolt adatok a tömbben. Következésképpen, ha a program egy számítógépen fut két vagy több processzor rendelkezésre álló, az adatok átalakítása ciklusban a tömb képezhetők For () párhuzamosan.
Ugyanakkor nem szabad elfelejteni, hogy nem minden ciklusban akkor végezhetők hatékonyan, ha azokat párhuzamosított. Általános szabály, hogy a kis ciklusok, és ciklus álló egy nagyon egyszerű művelet, végzett következetes módon gyorsabb, mint a párhuzamos. Éppen ezért a hurok inicializálási adatok fájl nem párhuzamosított módszer esetében () a programban itt vizsgált.
Párhuzamosítását kicsi és nagyon egyszerű ciklusok nem lehet hatékony, mert a szükséges időt a párhuzamos feladatokat, valamint időt töltött összefüggésben kapcsolási meghaladja az időtakarékos miatt párhuzamosság. A visszaigazoló e tényt a következő példa programok soros és párhuzamos verzióit a for ciklus, és az összehasonlítás megjeleníti az átfutási idő mindegyikre:
Először is, figyeljen arra, hogy a párhuzamos változata a hurok inicializálási adatállományt végezzük mintegy két-szer lassabb, mint a soros. Az a tény, hogy ebben az esetben, az értékadó operátor töltött kis időre, hogy a költségek további szervezett párhuzamosítás haladja megtakarítást, hiszen ez biztosítja.
Felhívjuk továbbá figyelmét, hogy a párhuzamos változata adatkonverziós folyamata gyorsabb, mint a soros. Ebben az esetben a megtakarítás párhuzamosítás több, mint költségeinek megtérítését a további szervezet.
Általános szabály, hogy kapcsolatban nyújtotta előnyöket a párhuzamosítását különböző ciklusok, szem előtt tartva kell a jelenlegi ajánlások a Microsoft. Ezen kívül, meg kell győződnie arról, hogy az párhuzamosítását a ciklus nem eredményez jobb teljesítményt, mielőtt ezt a ciklust végül kimerül az alkalmazás kódját.
Ami a fenti program, meg kell említeni két olyan egyéb funkciók. Először is, figyeljen arra, hogy párhuzamosan végez hurok elindítani a felhasznált adatok lambda kifejezés. Itt a „test” a ciklus jelzett lambda kifejezés. (Emlékezzünk, hogy a lyambdavyrazhenii létrehozunk egy anonim eljárás). Következésképpen a párhuzamos végrehajtás módjáról (számára) nem feltétlenül jelzi a megnevezett módszer.
Másodszor, figyeljen a használatát Stopper osztály kiszámításához ciklusidő. Ez az osztály található System.Diagnostics névtérben. Ahhoz, hogy használni, csak egy példányának létrehozásához célját, majd hívja meg a Start () metódus, az idők kezdete óta a jelentést, majd - Stop () módszer, a végső visszaszámlálás. A módszer segítségével a Reset () idő leteltével visszaáll.
A végrehajtási idejének hosszát állíthatjuk elő különböző módokon. A program keretében ellenérték erre a célra használt Eltelt tulajdonság. visszaadja egy objektum típusú TimeSpan. Ezzel a tárgy és tulajdonságok összesmásodperc idő másodpercenként mutatja, beleértve a másodperc töredéke alatt. Ahogy a példa a program itt vizsgált, Stopper osztály nagyon hasznos a fejlesztés párhuzamosan végrehajtható kódot.
Amint a fentiekben említettük, a (±) eljárás visszatér egy példányát egy objektum típus ParallelLoopResult. Ez a szerkezet, amely meghatározza a következő két tulajdonsággal:
IsCompleted ingatlan lesz a logikai értéke igaz, ha az összes lépést a ciklus. Más szóval, a szokásos befejezése a ciklus, ez a tulajdonság tartalmazza a logikai értéke igaz. Ha a ciklus megszakad idő előtt, akkor ez a tulajdonság tartalmaz egy logikai érték hamis. LowestBreakIteration tulajdonság tartalmazza a legkisebb érték a hurok kontroll változót, ha a ciklus megszakad, mielőtt az idő hívó eljárás ParallelLoopState.Break ().
Ahhoz, hogy a tárgy típusú ParallelLoopState módszert alkalmazzanak forma esetében () tagja, amely fogadja, mint egy második paramétert a jelenlegi állapot a ciklust. Az alábbiakban ezt az űrlapot () metódus látható a legegyszerűbb formában:
Ebben a formában küldött Action, ismerteti a hurok teste, meghatározása a következő:
A módszer Az () T1 generalizált paramétert kell int típusú, és a generalizált paraméter T2 - típusú ParallelLoopState. Amikor Action résztvevői kerül alkalmazásra, a jelenlegi állapotában a ciklus mint argumentum arg2.
Mert idő előtti megszüntetését ciklust kell használni szünet () metódust. okozott például ParallelLoopState típusú objektum testén belül a hurok által meghatározott test paramétert. Szünet () metódus nyilvánították az alábbiak szerint:
Calling Szünet () egy kérelmet a lehető legkorábbi megszüntetését ciklusban végzett párhuzamos, ami bekövetkezhet több ciklusban lépések után hívja Szünet (). De minden ciklus lépést mielőtt hívja szünet () még mindig elégedett. Azt is meg kell jegyezni, hogy egyes részei a ciklus nem hajtható végre párhuzamosan. Tehát, ha elfogadják 10 ciklus lépései, ez nem jelenti azt, hogy ezek a 10 lépésben az első 10 érték a hurok kontroll változó.
A ciklus megszakítása, párhuzamosan végzik módjával (), ez gyakran hasznos, ha adatokat keresni. Például, ha a keresési értéket talál, akkor nincs szükség, hogy továbbra is a ciklus. ciklus megszakítás hasznos lehet abban az esetben, hogy a következő művelet találkozott érvénytelen adatokat.
Foreach () módszer
ahol jelöli a forrás adatgyűjtés feldolgozott a ciklus, egy test - olyan eljárás, amely végrehajtásra kerül az egyes ciklusok alatt lépésben. Mint azt korábban kifejtettük, minden tömb, gyűjtemények, vagy más adatforrás által támogatott IEnumerable interfész
Hasonlóképpen módszer A (), a párhuzamos végrehajtás módszer foreach () hurok lehet állítani hívja szünet () módszer például ParallelLoopState típusú objektum keresztül továbbított a paraméter test, feltéve, hogy az alkalmazott módszer formájában foreach () az alábbi: