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


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

AsParallel usuli. AsParallel() usuli so'rovni ma'lumotlar manbasiga 
parallellashtirish imkonini beradi. U massivlar va to'plamlar uchun LINQ 
kengaytmasi usuli sifatida amalga oshiriladi. Ushbu usul chaqirilganda ma'lumotlar 
manbai qismlarga bo'linadi (agar iloji bo'lsa) va har bir qismda operatsiyalar alohida 
bajariladi. Raqamlarning faktoriallarini topishning eng oddiy misolini ko'rib 
chiqing: 
static void Main(string[] args) 

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


}
static int Factorial(int x) 

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

result *= i; 

Console.WriteLine($"{x} sonining faktoriali {result} ga teng."); 
return result

Aslida, bu oddiy LINQ so'rovi, ma'lumotlar manbasiga faqat AsParallel usuli 
qo'llaniladi. Dastur ishining natijasi faktorialni topish uchun ma'lumotlar ketma-ket 
tanlanmaganligini ko'rsatadi. Ya'ni, dasturning parallellashuvi mavjud edi: 
Kengaytma usullaridan foydalangan holda shunga o'xshash operatsiya: 
var factorials = numbers.AsParallel().Select(x => Factorial(x)); 
For All usuli. Faktorialni hisoblash uchun yuqoridagi kod parallellashtirish 
nuqtai nazaridan yanada optimallashtirilishi mumkin. Xususan, parallel amal 
natijasini ko'rsatish uchun foreach siklidan foydalaniladi. Ammo undan foydalanish 
xarajatlarning oshishiga olib keladi - turli xil oqimlarda olingan ma'lumotlarni bitta 
to'plamga yopishtirish va keyin ularni tsiklda takrorlash kerak. Bu holda
ma'lumotlarni qayta ishlangan oqimda chiqaradigan ForAll() usulidan foydalanish 
maqbulroq bo'ladi: 
int[] numbers = new int[] { -2, -1, 0, 1, 2, 4, 3, 5, 6, 7, 8, }; 
(from n in numbers.AsParallel() 
 where n >0 
 select Factorial(n)) 


 .ForAll(Console.WriteLine); 
ForAll() usuli parametr sifatida Action delegatini oladi, bu bajariladigan 
amalni bildiradi. 

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