16-Mavzu: linq so’rovlar. Reja: Parallel linq. Parallel linq ga kirish. AsParallel usuli. AsOrdered usuli


Download 152.19 Kb.
Pdf ko'rish
bet3/4
Sana18.06.2023
Hajmi152.19 Kb.
#1594030
1   2   3   4
Bog'liq
16-Mavzu LINQ so’rovlar (1)

2. AsOrdered usuli 
Parallel so'rovni bajarishda natijalar to'plamidagi ma'lumotlar tartibini 
oldindan aytib bo'lmaydi. Masalan: 
static void Main(string[] args) 

int[] numbers = new int[] { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, }; 
var factorials = from n in numbers.AsParallel() 
where n >0 
select Factorial(n); 
foreach (var n in factorials) 
Console.WriteLine(n);
Console.Read(); 

static int Factorial(int x) 

int result = 1;
for (int i = 1; i <= x; i++) 

result *= i; 

return result

Dastur bizga quyidagi natijalarni berishi mumkin: 
5040 

40320 

24 

120 
720 
Ya'ni, ma'lumotlar tartibsiz ravishda umumiy to'plamga biriktirilgan. Agar 
so'rovda so'rovda saralash operatorlari yoki usullari ishlatilsa, ma'lumotlar 
avtomatik ravishda saralanadi: 
var factorials = from n in numbers.AsParallel() 
where n >0 
orderby n 
select Factorial(n); 


Biroq, orderby operatori yoki OrderBy usuli har doim ham so'rovlarda 
ishlatilmaydi. Bundan tashqari, ular olingan namunani asl ketma-ketlikka ko'ra 
emas, balki natijalarga ko'ra buyruq beriladi. Bunday hollarda biz AsOrdered() 
usulidan foydalanishimiz mumkin: 
var factorials = from n in numbers.AsParallel().AsOrdered() 
where n >0 
select Factorial(n); 
Bunday holda, natija elementlarning joriy ketma-ketlikda joylashganligiga 
qarab tartiblanadi: 



24 
120 
720 
5040 
40320 
Shu bilan birga, parallel operatsiyada buyurtma berish qo'shimcha 
xarajatlarning oshishiga olib kelishini tushunish kerak, shuning uchun bunday so'rov 
tartibsizdan ko'ra sekinroq ishlaydi. Va agar topshiriq buyurtma qilingan to'plamni 
qaytarishni talab qilmasa, AsOrdered usulidan foydalanmaslik yaxshiroqdir. 
Bundan tashqari, agar dastur natijaviy to'plamni manipulyatsiya qilmoqchi 
bo'lsa, lekin buyurtma qilish endi talab qilinmasa, biz AsUnordered() usulidan 
foydalanishimiz mumkin: 
var factorials = from n in numbers.AsParallel().AsOrdered() 
where n >0 
select Factorial(n); 
var query = from n in factorials.AsUnordered() 
where n > 100 
select n

Download 152.19 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling