2010-05-23 33 views
16

Tôi đọc rằng PLinq sẽ tự động sử dụng LINQ song song nếu nó thấy PLinq đắt hơn. Vì vậy, tôi figured sau đó tại sao không sử dụng PLinq cho tất cả mọi thứ (khi có thể) và để cho thời gian chạy quyết định cái nào để sử dụng.Có OK để thử sử dụng Plinq trong tất cả các truy vấn LINQ không?

Ứng dụng sẽ được triển khai cho các máy chủ đa lõi và tôi OK để phát triển thêm một chút mã để xử lý song song.

Cạm bẫy của việc sử dụng plinq làm mặc định là gì?

Trả lời

9

Một lần giảm nguy cơ là bạn mất khả năng tận dụng thứ tự trong bộ.

Đi đoạn mã sau:

var results = new int { 0 ,1 ,2 ,3 }; 
var doSomethingSpecial = (from r in results.AsParallel() select r/2).ToArray(); 

Bạn không thể tin cậy vào kết quả sắp theo thứ tự vì vậy kết quả thể được bất kỳ hoán vị của bộ này. Đây là một trong những cạm bẫy lớn nhất, theo nghĩa nếu bạn đang xử lý dữ liệu được đặt hàng, thì bạn có thể mất lợi ích hiệu suất do chi phí phân loại.

Một vấn đề khác là bạn mất khả năng nắm bắt các ngoại lệ đã biết. Vì vậy, tôi không thể bắt một ngoại lệ con trỏ null (không nói bạn nên bao giờ làm điều đó) hoặc thậm chí bắt một FormatException.

Có rất nhiều lý do tại sao bạn không nên luôn luôn sử dụng Plinq trong mọi trường hợp và tôi sẽ làm nổi bật thêm một lần nữa. Đừng đọc quá uch vào "tự động sử dụng không song song LINQ", nó chỉ có thể xử lý các trường hợp rào cản nơi truy vấn là đơn giản, hoặc sẽ là quá phức tạp để chạy song song.

Luôn ghi nhớ rằng PLINQ càng sử dụng nhiều tài nguyên bạn sẽ tiêu thụ trên máy chủ, đang lấy đi từ các luồng đang chạy khác.

Resources:

MSDN PLNQ white paper

Paul Kimmel on PLINQ

+2

Đối với đảm bảo đặt hàng bạn có thể chỉ AsOrdered() mặc dù bạn rõ ràng là cần phải đo để tìm hiểu xem bạn có được bất cứ điều gì trong thuật toán của bạn vì điều này làm thêm trên không. Theo như trường hợp ngoại lệ, bạn sẽ nhận được một AggregateException nếu bất cứ điều gì xảy ra trong việc thực thi song song mà từ đó bạn có thể có được các ngoại lệ riêng lẻ đã xảy ra thông qua thuộc tính * InnerException * s. Như với mọi công nghệ, cách duy nhất để biết liệu nó có mang lại lợi ích cho bạn hay không là thực sự đo lường bằng cách sử dụng bộ dữ liệu đại diện cho những gì bạn sẽ được xử lý trong thế giới thực. –

Các vấn đề liên quan