Mavzu: Parallel Linq metodlari
Reja
Kirish
Linq tili haqida tushuncha
Parallel linq metodlari
Xulosa
Adabiyotlar
Kirish
LINQ so’zining qisqartmasi Language-Integrated Query, ya'ni integratsiyalashgan so'rovlar tili degan ma'noni anglatadi. Ushbu kontsepsiya ma'lumotlar bazasidan ma'lumot olish imkonini beruvchi bir qator vositalarni o'z ichiga oladi. Ma'lumki, ma'lumotlarni olish ko'plab dasturlarning muhim qismidir. Misol uchun, dastur mijozlar ro'yxatidan ma'lumot olishi, mahsulot katalogidagi ma'lumotlarni qidirishi yoki xodim kiritilgan hisobga olish hujjatiga kirishi mumkin. Odatda, bunday ma'lumotlar ilovadan alohida mavjud bo'lgan ma'lumotlar bazasida saqlanadi. Shunday qilib, mahsulot katalogi Relational ma'lumotlar bazasida saqlanishi mumkin. Oldin bunday ma'lumotlar bazasi bilan ishlash uchun tuzilgan so'rovlar (SQL) tilida so'rovlarni shakllantirish kerak edi. Va boshqa ma'lumot manbalariga kirish uchun, masalan, XML formatida alohida yondashuv talab qilindi. Shuning uchun, 3.0 versiyasiga qadar C# da o'xshash so'rovlarni qo'llab-quvvatlash yo'q edi. Biroq, bu holat LINQni qabul qilganidan keyin o'zgardi.
LINQ har qanday LINQ-mos keluvchi ma'lumot manbai uchun so'rovlarni yaratishga imkon beruvchi vositalar hisoblanadi. Shu bilan birga, so'rovlarni shakllantirish uchun ishlatiladigan sintaksis ma'lumot manbai turiga qaramasdan o'zgarishsiz qolmoqda. Bu, xususan, Relational ma'lumotlar bazasiga so'rov yaratish uchun zarur bo'lgan sintaksisning massivda saqlangan ma'lumotlar so'rovining sintaksisidan deyarli farq qilmaydi. Buning uchun endi manbadan ma'lumotlarni olish mexanizmi C# ga nisbatan SQL yoki boshqa tashqi vositalarga murojaat qilishning hojati yo'q. So'rovlarni shakllantirish qobiliyati bundan buyon C# tiliga to'liq integratsiyalangan.
SQL-dan tashqari, LINQ XML fayllari va ma'lumotlar to'plamlari bilan birgalikda ADO.NET Dataset texnologiyalarini ishlatilishi mumkin. Shunday qilib, LINQ vositalari, umuman, ma'lumotlarga bir xil kirishni ta'minlaydi. Va bunday printsipning o'zi juda samarali bo'lsada, LINQning afzalliklari bu bilan
chegaralanmaydi. LINQ ma'lumotlar bazalariga kirishni an'anaviy tashkil qilishdan tashqari, turli xil dasturiy vazifalarni hal qilish uchun boshqacha fikrlashni taklif qiladi. Va nihoyat, LINQ asosida ko'plab yechimlar ishlab chiqilishi mumkin.
C# tilida LINQ aslida tildir. Shuning uchun, linqni ko'rib chiqish mavzusi juda keng va ko'plab vositalar, imkoniyatlar va muqobillarni o'z ichiga oladi. Ushbu mavzuda LINQ vositalarining batafsil tavsifi berilgan bo'lsa-da, bu erda ularning barcha imkoniyatlarini, xususiyatlarini va dasturlarini ko'rib chiqish imkoniyati yo’q. Shu nuqtai nazardan, ushbu bo'lim LINQ ning asosiy elementlariga qaratilgan bo'lib, ulardan foydalanish ko'plab misollarda namoyish etiladi. Va uzoq muddatda LINQ mustaqil ravishda va batafsil o'rganish kerak bo'lgan kichik tizimdir.
Linq operatorlari:
Barcha so'rovlar quyida joylashgan bir qator muhim kalit so'zlarga asoslangan umumiy shaklga ega.
A scending
|
by
|
descending
|
equals
|
from
|
group
|
in
|
into
|
join
|
let
|
on
|
orderby
|
select
|
where
|
|
|
Ular orasidan faqat so'rovlar boshida quyida joylashgan kalit so'zlar ishlatiladi.
from
|
group
|
join
|
let
|
orderby
|
select
|
where
|
|
So'rov select kalit so'z bilan boshlanishi kerak va from yoki group kalit so'z bilan tugaydi. Select operatori so'rov bo'yicha berilgan qiymat turini belgilaydi va group operatori ma'lumotlarni guruhlar bilan qaytaradi va har bir guruh alohida-alohida o'tkazilishi mumkin. Yuqoridagi misollardan kelib chiqqan holda, operator istalgan elementni so'rov bo'yicha qabul qilish uchun kerak bo'lgan mezonlarni belgilaydi. Boshqa operatorlar so'rovni aniqlashtirishga imkon beradi.
where operator yordamida kerakli qiymatlarni tanlash
Yuqorida aytib o'tilganidek, where operatori so'rov bo'yicha qaytarilgan ma'lumotlarni tanlash uchun xizmat qiladi. Avvalgi misollarda ushbu operator eng oddiy shaklda namoyish etildi, unda ma'lumotlarni tanlash uchun yagona shart ishlatiladi. Shu bilan birga, batafsil ma'lumot olish uchun bir nechta shartlar va ayniqsa, bir nechta where operatorlaridan foydalanish mumkin. Misol sifatida, quyidagi dasturni ko'rib chiqaylik, berilgan massivdan 10 dan kichik va musbat qiymatlarni olish masalasini ko’rib chiqaylik.
// Bir nechta where operatorini ishlatish.
using System;
using System.Linq;
class TwoWheres
{
static void Main()
{
int[] nums = { 1, -2, 3, -3, 0, -8, 12, 19, 6, 9, 10 };
// Musbat qiymatlarni va 10 dan kichik qiymatlarni olish uchun so'rov yaratish.
var posNums = from n in nums
where n > 0
where n < 10
select n;
Console.Write("10 dan kichik musbat sonlar: ");
// So'rovni bajarish va natijalarini chiqarish.
foreach (int i in posNums) Console.Write(i + " ");
Console.WriteLine();
Console.ReadKey();
}
}
Ushbu dastur quyidagi natijani beradi.
10 dan kichik musbat sonlar: 1 3 6 9
Ko'rib turganingizdek, bu so'rov bo'yicha faqat 10 dan kichik musbat qiymatlar olindi.. Ushbu natijaga quyidagi ikkita where operator orqali erishildi.
where n > 0
where n < 10
orderby operatori bilan so'rov natijalarini saralash
Ko'pincha so'rov natijalari saralashni talab qiladi. Hisobni balanslash tartibida muddati o'tgan hisoblar ro'yxatni olish olish kerak bo’lishi mumkin: eng kattasidan kichikiga yoki mijozlarning ismlari ro'yxatini alifbo tartibida. LINQ vositasining so'rov natijalarini orderby operatori yordamida osongina tartiblash mumkin.
Orderby operatori so'rov natijalarini bir yoki bir nechta mezonlarga ko'ra tartiblashtirish uchun ishlatilish mumkin. Birinchidan, bitta elementni tartiblashning eng oddiy usulini ko'rib chiqamiz. Quyida so'rov natijalarini bitta mezon bo'yicha tartiblash uchun orderby operatorining umumiy shakli keltirilgan:
orderby element tartibi
bu erda “element” saralash amalga oshiriladigan ma'lum elementni bildiradi. Bu ma'lumotlar manbasida saqlanadigan butun element yoki ushbu elementdagi bitta maydonning bir qismi bo'lishi mumkin. “tartibi” navbati bilan o'sib boruvchi yoki kamayib boruvchi tartibni, tegishli ravishda ascending yoki descending kalit so'zlarni majburiy ravishda qo'shish bilan amalga oshiriladi. Odatda, o’sish tartibida tartiblash uchun ascending kalit so'z odatda qo’yilmaydi.
Quyida int turidagi massivdan qiymatlarni olish uchun orderby operatoridan foydalanilgan dastur keltirilgan.
// orderby operatoridan foydalanish.
using System;
using System.Linq;
class OrderbyDemo
{
static void Main()
{
int[] nums = { 10, -19, 4, 7, 2, -5, 0 };
// Saralangan tartibda qiymatlarni olish uchun so'rov yaratish
var posNums = from n in nums
orderby n
select n;
Console.Write("O'sish qiymatlari: ");
// So'rovni ishga tushirish va natijalarini ko'rsatish.
foreach (int i in posNums) Console.Write(i + " ");
Console.WriteLine();
Console.ReadKey();
}
}
Ushbu dasturni bajarishda quyidagi natija olinadi.
O'sish qiymatlari: -19 -5 0 2 4 7 10
Quyida o’sish tartibida tartiblangan qiymatni kamayish tartibini o'zgartirish uchun, descending kalit so'z yozish kifoya qiladi.
var posNums = from n in nums
orderby n descending
select n;
Ushbu so'rovni bajargandan so’ng, qiymatlarni teskari tartibda olasiz.
Ko'pincha so'rov natijalarini saralash yagona mezonga muvofiq amalga oshiriladi. Shunga qaramay, orderby operatorining quyidagi shakli bir necha mezonlarga ko'ra tartiblash uchun xizmat qiladi.
orderby element_a yo'nalishi, element_b yo'nalishi, element_c yo'nalishi, …
// orderby operatori yordamida so'rov natijalarini
//bir nechta mezonlar bo'yicha tartiblang
using System;
using System.Linq;
class Account
{
public string Fam { get; private set; }
public string Ism { get; private set; }
public double Balans { get; private set; }
public string AccountNumber { get; private set; }
public Account(string fn, string In, string accnum, double b)
{
Fam = fn;
Ism = In;
AccountNumber = accnum;
Balans = b;
}
}
class OrderbyDemo
{
static void Main()
{
// Manba ma'lumotlarini yaratish.
Account[] accounts =
{ new Account("Abdiazizova", "Nilufar", "132CK", 100.23),
new Account("Ashurova", "Lobar", "454MM", 1923.85),
new Account("Latipov", "Sardor", "434СК", -123.32),
new Account("Qurbonov", "Zokir", "543ММ", 5017.40),
new Account("Sattorov", "O'ral", "547CD", 34955.79),
new Account("Yusufov", "Umidjon", "843СК", 345.00),
new Account("Pitinov", "Ozodbek", "156СК", 423.32),
new Account("Sodikov", "Abubakir", "325ММ", 567.40),
new Account("Bahromov", "Ozodbek", "156CD", 145.19),
new Account("Bahromov", "Ozodbek", "897CK", 3223.15),
};
// Tartiblangan tartibda bank hisob varaqlari to'g'risida ma'lumot olish uchun so'rov yaratish.
//Ushbu ma'lumotni avval ism, keyin familiya va hisob balansi bo'yicha tartiblash.
var accinfo = from acc in accounts
orderby acc.Ism, acc.Fam, acc.Balans
select acc;
Console.WriteLine("Saralangan ma'lumotlar: ");
string str = "";
// So'rovni ishga tushirish va natijalarini ko'rsatish,
int i = 1;
foreach (Account acc in accinfo)
{
if (str != acc.Fam)
{
str = acc.Fam;
}
Console.WriteLine(i + " {0}, {1}\tHisob nomeri: {2}, {3}",
acc.Ism, acc.Fam, acc.AccountNumber, acc.Balans);
i++;
}
Console.ReadKey();
}
}
Parallel linq metodlari
Integrated Query (LINQ) deklarativ modelni taqdim etadi,kabi ma'lumotlar ketma-ketligini so'rashga imkon beradi xotiradagi to'plamlar, XML hujjatlari va ma'lumotlar bazasi ma'lumotlari. Xarakter Ko'p so'rovlar ularni osongina parallellashtirish mumkinligini anglatadi. Ko'pchilik so'rovlar har bir element uchun bir xil harakatlar guruhini bajaradi yig'ish. Agar ushbu harakatlarning barchasi mustaqil bo'lsa, nojo'ya ta'sirlarsiz Ko'pincha siz ularni paydo bo'lish tartibidan kelib chiqadigan effektlarni ko'rishingiz mumkin birgalikda ishlash orqali samaradorlikning katta o'sishiga erishish bir nechta protsessor yadrolari o'rtasida.
Ushbu .NET Framework versiyasining 4.0 skriptlarini qo'llab-quvvatlash uchun
Parallel LINQ (PLINQ) bilan tanishtirildi. PLINQ xuddi shu standartni ta'minlaydi
so'rov operatorlari va LINQ kabi so'rovlar ifoda sintaksisi. Asosiyfarq shundaki, dastlabki ma'lumotlarni qismlarga bo'lish mumkin ma'lumotlarning dekompozitsiyasidan foydalanish. Bu kichik ma'lumotlar guruhlari potentsial barcha mavjud CPU yadrolari tomonidan boshqariladi. Plinq bor bu to'g'ridan-to'g'ri almashtirish emasligini anglatuvchi ba'zi cheklovlar LINQ so'rovlar uchun standart parametr bo'lolmaydi. Kalit Cheklovlar soni individualni qayta ishlashning yon ta'siri manba ketma-ketligidagi elementlar, masalan, ishlov berish natijasida Bir elementning boshqasiga bog'liqligi oldindan aytib bo'lmaydigan 90 ga olib kelishi mumkin natijalar. Buning sababi asl elementlar odatda yo'q asl tartibda ishlov beriladi. Ikkinchi cheklov PLINQ xotira ichidagi ma'lumotlarga o'xshashlikni ta'minlaydi to'plamlar yoki oldindan yuklangan XML. LINQ so'rovini parallel ravishda qanday o'zgartirish mumkinligini ko'rsatish ishlov berish, avval siz seriya versiyasini olishingiz kerak. Quyidagi kodda Juda oddiy so'rov ko'rsatilgan. Bu erda biz o'z ichiga olgan qatordan boshlaymiz birdan o'ngacha bo'lgan butun sonlar. Select operatoridan foydalanib, biz loyihalashtiramiz uni asl kvadratlarini o'z ichiga olgan yangi ketma-ketlikka qadriyatlar. LINQ kechiktirilgan ijrodan foydalanganligi sababli, yangi ma'lumotlar bo'lguncha ketma-ketlik hosil bo'lmaydi mavjud. Bu shuni anglatadiki, oldingi tsikl so'rovni bajarishga majbur qiladi va natijalarni ko'rsatadi.
int [] ketma-ketlik = Sanoqli. Range (1, 10) .ToArray ();
var kvadratchalar = ketma-ketlik. Tanlang (x => x * x);
oldindan belgilash (kvadratlar ichida kvadrat)
{
Konsol .Write (kvadrat "" ");
}
Console.ReadLine ();
Natija: 1 4 9 16 25 36 49 64 81 100
LINQ interfeysni amalga oshiradigan ketma-ketliklar bilan ishlaydi Sanab bo'lmaydigan . PLINQ-dan foydalanishni xohlayotganimizni ko'rsatish uchun biz statik AsParallel usuldan foydalanishi kerak. Bu usul IEnumerable kengaytmasi, shuning uchun uni har qanday narsaga qo'llash mumkin. LINQ operatsiyalarini qo'llab-quvvatlaydigan ketma-ketlik. U ob'ektni qaytaradi
ParallelQuery turini kiriting. Agar parallel ketma-ketlik bo'lsa
ma'lumotlar, siz uni LINQ operatsiyalari uchun manba sifatida foydalanishingiz mumkin, har qanday boshqa ketma-ketlikda bo'lgani kabi. PLINQ bu kabi ma'lumotlarni ajratadi samarali parallel ishlov berishni ta'minlash usuli. So'rovni parallellashtirish uchun qo'ng'iroqni ko'rsatilganidek AsParallel qo'shing quyida:
var kvadratchalar = ketma-ketlik.AsParallel (). Tanlang (x => x * x);
Natija: 100 1 25 36 49 64 81 4 9 16
Siz PLINQ so'rovi natijalari to'g'ri ekanligini payqagan bo'lishingiz mumkin, ammo ular ketma-ketlikni ishlatishdan ko'ra boshqa tartibda paydo bo'ldi LINQ versiyasi. Bu parallel ravishda ishlaydigan so'rovlarning qo'shimcha mahsuloti. LINQ Ba'zi hollarda natijalarni buyurtma qilish muhim emas, ayniqsa, agar ma'lumotlar keyinchalik saralangan bo'lsa standart buyurtma operatori yordamida OrderBy yoki ba'zilari imperativ usul. Boshqa hollarda, asl nusxani buzish buyurtma halokatli bo'lishi mumkin. Bunday vaziyatlarda sizga kerak kirish tartibiga muvofiq natijalar tartibini saqlash. Plinq parallel ravishda ma'lumotlar manbai tartibini saqlashni qo'llab-quvvatlaydi AsOrdered usuli yordamida. Ushbu usul faqat ishlatilishi kerak. natijalar tartibini saqlash kerak bo'lganda, bu mumkin
so'rovlaringizni sezilarli darajada pasaytiradi. Quyidagi so'rov AsParallel-dan keyin AsOrdered usulidan foydalanadi natijalar tartibini ta'minlash.
var kvadratchalar = ketma-ketlik.AsParallel (). AsOrdered () ni tanlang (x => x * x);
Natija: 1 4 9 16 25 36 49 64 81 100
LINQ yordamida ketma-ket so'rovni bajarganingizda, har qanday qayta ishlangan ma'lumotlar elementi istisnoga olib kelishi mumkin. Qachon istisno bekor qilinadi, so'rov darhol bajarilishini to'xtatadi. Bilan PLINQ bir vaqtning o'zida bir nechta operatsiyalarni bajarishi mumkin.
Sintaksis
• ParallelEnumerable.Aggregate (func)
• ParallelEnumerable.Aggregate (, funktsiya) ParallelEnumerable.Aggregate (urug', yangilanishAccumulatorFunc, kombinatAccumulatorsFunc,natija selektor)
•ParallelEnumerable.Aggregate (seedFactory, updateAccumulatorFunc, kombinatKkumulyatorlariFunc, natija selektori)
• ParallelEnumerable.All (predikat)
• ParallelEnumerable.Any ()
• ParallelEnumerable.Any (predikat)
• ParallelEnumerable.AsEnumerable ()
• ParallelEnumerable.AsOrdered ()
• ParallelEnumerable.AsParallel ()
• ParallelEnumerable.AsSequential ()
• ParallelEnumerable.AsUnordered ()
• ParallelEnumerable.Average (selektor)
• ParallelEnumerable.Cast ()
• ParallelEnumerable.Concat (ikkinchi)
•ParallelEnumerable.Contains (value)
•ParallelEnumerable.Contains (qiymat, taqqoslash)
• ParallelEnumerable.Count ()
•ParallelEnumerable.Count (predikat)
• ParallelEnumerable.DefaultIfEmpty ()
• ParallelEnumerable.DefaultIfEmpty (asl qiymati)
• ParallelEnumerable.Distinct ()
• ParallelEnumerable.Distinct (taqqoslagich)
• ParallelEnumerable.ElementAt (indeks)
• ParallelEnumerable.ElementAtOrDefault (indeks)
• ParallelEnumerable.Empty ()
• ParallelEnumerable.Except (ikkinchi)
•ParallelEnumerable.Except (ikkinchi, qiyoslovchi)
• ParallelEnumerable.First ()
• ParallelEnumerable.First (predict)
• ParallelEnumerable.FirstOrDefault ()
• ParallelEnumerable.FirstOrDefault (predikat)
• ParallelEnumerable.ForAll (harakat)
• ParallelEnumerable.GroupBy (keySelector)
• ParallelEnumerable.GroupBy (keySelector, qiyoslovchi)
• ParallelEnumerable.GroupBy (keySelector, elementSelector)
• ParallelEnumerable.GroupBy (keySelector, elementSelector, qiyosiy)
• ParallelEnumerable.GroupBy (keySelector, resultSelector)
ParallelEnumerable.GroupBy (keySelector, resultSelector, qiyosiy)
• ParallelEnumerable.GroupBy (keySelector, elementSelector, policySelector)
• ParallelEnumerable.GroupBy (keySelector, elementSelector, ережalar selektori, taqqoslash)
• ParallelEnumerable.GroupJoin (ichki, tashqiKeySelektor, ichkiKeySelektor, natija to'plami)
•ParallelEnumerable.GroupJoin (ichki, tashqiKeySelektor, ichkiKeySelektor, natija selektori,qiyoslovchi)
• ParallelEnumerable.Intersect (ikkinchi)
•ParallelEnumerable.Intersect (ikkinchi, taqqoslagich)
• ParallelEnumerable.Join (ichki, tashqi klaviatura, ichki klaviatura, natija selektori)
•ParallelEnumerable.Join (ichki, tashqiKeySelektor, ichkiKeySelektor, natija selektori,qiyoslovchi)
• ParallelEnumerable.Last ()
• ParallelEnumerable.Last (predikat)
• ParallelEnumerable.LastOrDefault ()
• ParallelEnumerable.LastOrDefault (predikat)
• ParallelEnumerable.LongCount ()
• ParallelEnumerable.LongCount (predikat)
• ParallelEnumerable.Max ()
• ParallelEnumerable.Max (selektor)
• ParallelEnumerable.Min ()
• ParallelEnumerable.Min (selektor)
• ParallelEnumerable.OfType ()
• ParallelEnumerable.OrderBy (keySelector)
• ParallelEnumerable.OrderBy (keySelector, qiyoslovchi)
• ParallelEnumerable.OrderByDescending (keySelector)
• ParallelEnumerable.OrderByDescending (keySelector, qiyosiy)
•ParallelEnumerable.Range (boshlash, hisoblash)
• ParallelEnumerable.Repeat (element, hisoblash)
• ParallelEnumerable.Reverse ()
• ParallelEnumerable.Selek (tanlang)
• ParallelEnumerable.SelectMany (selektor)
• ParallelEnumerable.SelectMany (collectionSelector, resultSelector)
• ParallelEnumerable.SequenceEqual (ikkinchi)
• ParallelEnumerable.SequenceEqual (ikkinchi, taqqoslovchi)
• ParallelEnumerable.Single ()
• ParallelEnumerable.Single (predikat)
• ParallelEnumerable.SingleOrDefault ()
• ParallelEnumerable.SingleOrDefault (predikat)
• ParallelEnumerable.Skip (hisoblash)
• ParallelEnumerable.SkipWhew (predikat)
• ParallelEnumerable.Sum ()
• ParallelEnumerable.Sum (selektor)
• ParallelEnumerable.Take (hisoblash)
• Parallel ravishda sanab bo'ling.
• ParallelEnumerable.ThenBy (keySelector)
• ParallelEnumerable.ThenBy (keySelector, qiyoslovchi)
• ParallelEnumerable.ThenByDescending (keySelector)
• ParallelEnumerable.ThenByDescending (keySelector, qiyosiy)
• ParallelEnumerable.ToArray ()
• ParallelEnumerable. ToDordam (keySelector)
• ParallelEnumerable. ToDordam (keySelector, qiyosiy)
• ParallelEnumerable. ToDordam (elementSelector)
• ParallelEnumerable. ToDordam (elementSelector, taqqoslash)
• ParallelEnumerable.ToList ()
• ParallelEnumerable.ToLookup (keySelector)
• ParallelEnumerable.ToLookup (keySelector, qiyosiy)
• ParallelEnumerable.ToLookup (keySelector, elementSelector)
• ParallelEnumerable.ToLookup (keySelector, elementSelector, qiyosiy)
•ParallelEnumerable.Union (ikkinchi)
•ParallelEnumerable.Union (ikkinchi, taqqoslagich)
• ParallelEnumerable.Where (predikat)
• ParallelEnumerable.WithCancellation (bekor qilishToken)
•ParallelEnumerable.WithDegreeOfParallelism (darajasiOffarparalizm)
• ParallelEnumerable.WithExmissionsMode (performanceMode)
• ParallelEnumerable.WithMergeOptions (mergeOptions)
• ParallelEnumerable.Zip (ikkinchi, natija tanlagich)
Misollar
Oddiy misol
Ushbu misol PLINQ-dan 1 dan 10000 gacha bo'lgan juft sonlarni hisoblashda qanday ishlatilishini ko'rsatadi. Bir nechta iplardan foydalangan holda 10000. E'tibor bering, natijada ro'yxat buyurtma qilinmaydi!
var ketma-ketligi = Enumable.Range (1, 10000);
var evenNumbers = ketma-ketlik.AsParallel ()
. (Qayerda (x => x% 2 == 0)
.To‘plam ();
// evenNumbers = {4, 26, 28, 30, ...}
// Buyurtma har xil versiyalarda o'zgaradi
DegreeOfParallelism bilan
Parallellik darajasi - bajariladigan vazifalarning maksimal bajarilish soni
so'rovni qayta ishlash uchun ishlatiladi.
var ketma-ketligi = Enumable.Range (1, 10000);
var evenNumbers = ketma-ketlik.AsParallel ()
Paralellik darajasi bilan. (4)
.Qaerda (x => x% 2 == 0);
AsOrdered
Ushbu misol PLINQ-dan 1 dan 1 gacha bo'lgan juft sonlarni hisoblashda qanday ishlatilishini ko'rsatadi
Bir nechta iplardan foydalangan holda 10000. Olingan ro'yxatda buyurtma saqlanadi, ammo yodda tuting
AsOrdered ko'plab elementlarning ishlashiga zarar etkazishi mumkin, shuning uchun buyurtma qilinmagan ishlov berish
iloji bo'lsa afzal ko'riladi.
var ketma-ketligi = Enumable.Range (1, 10000);
var evenNumbers = ketma-ketlik
.Ordered ()
. (Qayerda (x => x% 2 == 0)
.To‘plam ();
// evenNumbers = {2, 4, 6, 8, ..., 10000}
AsUnordered
Buyurtma qilingan ketma-ketliklar ko'p sonli elementlar bilan ishlashda ishlashga zarar etkazishi mumkin. Kimga
buni yumshatish uchun ketma-ket buyurtma kerak bo'lmaganda AsUnordered-ga qo'ng'iroq qilish mumkin.
var ketma-ketligi = Sanab bo'lmaydigan.Range (1, 10000) .Telefin (x => -1 * x); // -1, -2, ...
var evenNumbers = ketma-ketlik
.OrderBy (x => x)
.Tashlang (5000)
.AsUnordered ()
. (X => x% 2 == 0) // bu satr buyurtma orqali ta'sirlanmaydi
.To‘plam ();
Xulosa
Xulosa qilib shuni aytish mumkinki bu masalalarda Linq dasturlash tili bilan bog’liq vaziyatlarda obektiv yondashiladi. Shu boisdan yuqori tillardan farqi juda kattaligi bilan ajralib turadi. Shuning uchun har qaysi dasturlash tilida o’zining metodi bo’ladi.
Adabiyotlar
1. Вагнер, Билл С# Эффективное программирование / Билл Вагнер. - М.: ЛОРИ, 2013. - 320 c.
2. Зиборов, В.В. Visual C# 2012 на примерах / В.В. Зиборов. - М.: БХВ-Петербург, 2013. - 480 c.
3. Подбельский, В. В. Язык С#. Базовый курс / В.В. Подбельский. - М.: Финансы и статистика, Инфра-М, 2011. - 384 c.
4. Прайс, Джейсон Visual C# 2.0. Полное руководство / Джейсон Прайс , Майк Гандэрлой. - М.: Век +, Корона-Век, Энтроп, 2010. - 736 c.
5. Рихтер, Джеффри CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C# / Джеффри Рихтер. - М.: Питер, 2013. - 928 c.
6. Троелсен, Эндрю Язык программирования C# 5.0 и платформа .NET 4.5 / Эндрю Троелсен. - М.: Вильямс, 2015. - 486 c.
Do'stlaringiz bilan baham: |