16-Mavzu: linq so’rovlar. Reja: Parallel linq. Parallel linq ga kirish. AsParallel usuli. AsOrdered usuli
Download 152.19 Kb. Pdf ko'rish
|
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 1 40320 2 24 6 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: 1 2 6 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling