Cara: Menentukan Mode Eksekusi di PLINQ
Contoh ini menunjukkan cara memaksa PLINQ untuk melewati heuristik defaultnya dan menyejajarkan kueri terlepas dari bentuk kueri.
Catatan
Contoh-contoh ini dimaksudkan untuk menunjukkan penggunaan dan mungkin tidak berjalan lebih cepat daripada kueri LINQ berurutan yang setara ke kueri Objek. Untuk informasi selengkapnya, lihat Memahami Percepatan di PLINQ.
Contoh
// Paste into PLINQDataSample class.
static void ForceParallel()
{
var customers = GetCustomers();
var parallelQuery = (from cust in customers.AsParallel()
.WithExecutionMode(ParallelExecutionMode.ForceParallelism)
where cust.City == "Berlin"
select cust.CustomerName)
.ToList();
}
Private Shared Sub ForceParallel()
Dim customers = GetCustomers()
Dim parallelQuery = (From cust In customers.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism)
Where cust.City = "Berlin"
Select cust.CustomerName).ToList()
End Sub
PLINQ dirancang untuk mengeksploitasi peluang untuk paralelisasi. Namun, tidak semua kueri mendapat manfaat dari eksekusi paralel. Misalnya, ketika kueri berisi delegasi pengguna tunggal yang melakukan sedikit pekerjaan, kueri biasanya akan berjalan lebih cepat secara berurutan. Eksekusi berurutan lebih cepat karena overhead yang terlibat dalam mengaktifkan eksekusi paralel yang lebih mahal daripada speedup yang diperoleh. Oleh karena itu, PLINQ tidak secara otomatis memparalelkan setiap kueri. Ini pertama-tama memeriksa bentuk kueri dan berbagai operator yang terdiri darinya. Berdasarkan analisis ini, PLINQ dalam mode eksekusi default dapat memutuskan untuk menjalankan beberapa atau semua kueri secara berurutan. Namun, dalam beberapa kasus Anda mungkin tahu lebih banyak tentang kueri Anda daripada PLINQ dapat menentukan dari analisisnya. Misalnya, Anda mungkin tahu bahwa delegasi itu mahal dan kueri pasti akan mendapat manfaat dari paralelisasi. Dalam kasus seperti itu, Anda dapat menggunakan WithExecutionMode metode dan menentukan ForceParallelism nilai untuk menginstruksikan PLINQ untuk selalu menjalankan kueri sebagai paralel.
Mengompilasi Kode
Potong dan tempel kode ini ke dalam Sampel Data PLINQ dan panggil metode dari Main
.