2013-06-04 26 views
12

Tôi có một bộ sưu tập khổng lồ mà tôi muốn xử lý từng đối tượng theo kiểu song song. Làm cùng một cách đồng bộ thông thường liên quan đến một đơn giản "foreach".Parallel.ForEach vs AsParallel() ForAll

Chỉ cần tự hỏi, những gì cần sử dụng trong kịch bản của tôi tức là, hoặc Parallel.ForEach hoặc MyCollection.AsParallel(). ForAll().

Bạn có thể làm sáng tỏ một số lợi ích của việc sử dụng cái này so với cái kia hay không.

+1

Điều này có vẻ liên quan; http://stackoverflow.com/questions/2270097/does-parallel-foreach-require-asparallel?rq=1 – Patrick

+1

có thể trùng lặp của [Song song một nhiệm vụ sử dụng .AsParallel(). ForAll hoặc Parallel.ForEach hiệu suất vấn đề] (http: //stackoverflow.com/questions/8415998/parallelizing-a-task-using-asallel-forall-or-parallel-foreach-performance) – Patrick

Trả lời

17

Cách tôi nhìn thấy, nếu tất cả những gì bạn muốn làm là để song song foreach, bạn nên sử dụng phiên bản song song của nó, là Parallel.ForEach().

ParallelEnumerable.ForAll() là dành cho trường hợp cụ thể nơi bạn có truy vấn LINQ theo sau là foreach và bạn muốn song song cả hai. Vì vậy, những gì bạn làm là bạn song song truy vấn LINQ bằng cách thêm AsParallel() và sau đó bạn song song foreach bằng cách thay đổi thành ForAll().

5

Thời gian và chọn người chiến thắng.

Tôi đã tìm thấy Parallel.ForEach để hoạt động tốt hơn trong hầu hết các trường hợp song song thú vị. Dường như nó sử dụng một mô hình cân bằng công việc tiên tiến hơn. PLINQ chủ yếu nhằm vào các truy vấn song song.

-2

Bạn có tùy chọn đặt hàng các phần tử với AsParallel(). AsOrdered(). Đặt hàng trong Parallel.ForEach không phải là ra khỏi hộp, chúng ta cần làm điều đó.

1

My 2 cents:

Với ForAll bạn có thể xác định mức độ mong muốn song song bằng cách sử dụng phương pháp WithDegreeOfParallelism mở rộng.

Với ForEach bạn chỉ có thể giới hạn mức tối đa.

Về cơ bản, bạn có thể buộc ForAll để sử dụng nhiều chủ đề hơn.

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