مشاركة عبر


كيفية القيام بما يلي: إنشاء و ينفذ استعلام بسيط PLINQ

يوضح المثال التالي كيف إلى إنشاء استعلام LINQ متوازى بسيط باستخدام AsParallelأسلوب التوسيع تشغيل تسلسل المصدر، وتنفيذ الاستعلام باستخدام ParallelEnumerableForAll()الأسلوب.

ملاحظةملاحظة

يستخدم هذه الوثائق تعبيرات لامدا إلى تعريف التفويضات في PLINQ.إذا لم تكن معتاداً على تعبيرات لامدا في C# أو Visual أساسى، راجع لامدا التعبيرات في PLINQ و TPL.

مثال

Sub SimpleQuery()

    Dim source = Enumerable.Range(100, 20000)

    ' Result sequence might be out of order.
    Dim parallelQuery = From num In source.AsParallel()
                            Where num Mod 10 = 0
                            Select num

    ' Process result sequence in parallel
    parallelQuery.ForAll(Sub(e)
                             DoSomething(e)
                         End Sub)

    ' Or use For Each to merge results first
    ' as in this example, Where results must
    ' be serialized sequentially through static Console method.
    For Each n In parallelQuery
        Console.Write("{0} ", n)
    Next

    ' You can also use ToArray, ToList, etc
    ' as with LINQ to Objects.
    Dim parallelQuery2 = (From num In source.AsParallel()
                              Where num Mod 10 = 0
                              Select num).ToArray()

    'Method syntax is also supported
    Dim parallelQuery3 = source.AsParallel().Where(Function(n)
                                                       Return (n Mod 10) = 0
                                                   End Function).Select(Function(n)
                                                                            Return n

                                                                        End Function)

    For Each i As Integer In parallelQuery3
        Console.Write("{0} ", i)
    Next
    Console.ReadLine()

End Sub

' A toy function to demonstrate syntax. Typically you need a more
' computationally expensive method to see speedup over sequential queries.
Sub DoSomething(ByVal i As Integer)
    Console.Write("{0:###.## }", Math.Sqrt(i))
End Sub
            var source = Enumerable.Range(100, 20000);

            // Result sequence might be out of order.
            var parallelQuery = from num in source.AsParallel()
                                where num % 10 == 0
                                select num;

            // Process result sequence in parallel
            parallelQuery.ForAll((e) => DoSomething(e));

            // Or use foreach to merge results first.
            foreach (var n in parallelQuery)
            {
                Console.WriteLine(n);
            }

            // You can also use ToArray, ToList, etc
            // as with LINQ to Objects.
            var parallelQuery2 = (from num in source.AsParallel()
                                  where num % 10 == 0
                                  select num).ToArray();

            // Method syntax is also supported
            var parallelQuery3 = source.AsParallel().Where(n => n % 10 == 0).Select(n => n);

Th هو يوضح المثال نقش أساسية لإنشاء وتنفيذ أي LINQ متوازى الاستعلام عند ترتيب التسلسل نتيجة هو غير هامة؛ الاستعلامات غير مرتبة تكون عادة أسرع من استعلامات المرتبة. الأقسام الاستعلام المصدر في المهام التي يتم تنفيذها بشكل متزامن تشغيل مؤشرات ترابط متعددة. يعتمد الترتيب إكمال كل مهمة ليس فقط تشغيل مقدار العمل المتضمنة إلى معالجة العناصر الموجودة في القسم، ولكن أيضا تشغيل facإلىrs خارجية مثل كيفية جدولة النظام التشغيل لكل مؤشر ترابط. لمزيد من المعلومات حول كيفية إلى الاحتفاظ بترتيب العناصر في استعلام، راجع كيفية القيام بما يلي: عنصر تحكم أمر في استعلام PLINQ.

التحويل البرمجي للتعليمات البرمجية

  • إنشاء مشروع تطبيق Console

  • قم بلصق المثال تعليمات برمجية بعد الرئيسي أسلوب.

  • قم بإضافة استدعاء إلى SimpleQuery من الرئيسي واضغط F5.

راجع أيضًا:

المبادئ

متوازى LINQ (PLINQ)