2010-05-13 28 views
7

Tôi tò mò về các đặc tính hiệu năng của Parallel.ForEach. Cho bất kỳ cấu trúc hợp lệ nào bên trong một vòng lặp Parallel.ForEach, nó luôn luôn thích hợp hơn để sử dụng Parallel.ForEach trong vòng lặp foreach? Tôi đặc biệt tự hỏi về chi phí của việc gọi thư viện Parallel Tasks trên các bộ nhỏ hoặc các trường hợp cạnh khác, nơi vòng lặp foreach có thể nhanh hơn. Tôi biết thư viện khá thông minh về thời gian/cách tạo chủ đề ... có trường hợp tốt hơn là chỉ để lại mã trong vòng lặp foreach hay là chi phí cho việc gọi Parallel Tasks thường không thể thực hiện được, vì vậy nếu có thể, bạn nên sử dụng Parallel.ForEach?Các hướng dẫn cho Parallel.ForEach vs. foreach là gì?

Câu hỏi này tương tự và cung cấp thông tin khác biệt về chức năng tốt nhưng không thực sự nói đến hiệu suất. Lưu ý rằng tôi đang bỏ qua khả năng tương thích với .NET < 4 như một lý do để ở lại với một foreach:

C#: Any benefit of List<T>.ForEach(...) over plain foreach loop?

+1

Bạn có thể tìm thấy một số câu trả lời tại đây http://www.microsoft.com/downloads/details.aspx?familyid=C3EA8FB5-650D-434B-A216-7E54C53965D1&displaylang=vi –

Trả lời

8

Đó là không phải lúc nào thích hợp hơn. Đối với các vòng lặp nhanh, Parallel.ForEach có thể làm giảm hiệu suất. Một trong các nguyên tắc được liệt kê trong Parallel Programming Coding Guidelinesđo lường cả trước và sau khi song song.

Các bài viết hữu ích khác đã được xuất bản bởi parallel computing group.

+0

Tôi hiểu và đồng ý với việc đo lường hiệu suất, nhưng đó là tốt đẹp để có một hướng dẫn chung để bắt đầu với (như bình luận của bạn về các cơ quan vòng lặp nhanh). Liên kết tải xuống từ @Daniel Straight cũng có một số công cụ chung tốt. http://www.microsoft.com/downloads/details.aspx?familyid=C3EA8FB5-650D-434B-A216-7E54C53965D1&displaylang=vi –

+0

+1 để tham khảo Nguyên tắc lập trình song song. – Steven

2

Tôi muốn luôn gắn bó đơn giản (ví dụ: thông thường foreach) và chỉ triển khai các nội dung phức tạp hơn (ví dụ: Parallel ForEach) khi bạn có yêu cầu có thể đo lường để làm như vậy. Vì vậy, nếu bạn có thể chứng minh rằng trong một trường hợp cụ thể mà foreach bình thường không nhanh như bạn cần, và bạn có thể chứng minh cho ví dụ cụ thể mà Parallel foreach sẽ giải quyết vấn đề của bạn, sau đó sử dụng Parallel.

Nếu không, hãy giữ nó đơn giản.

+3

Tôi không đồng ý với điều này, "nhanh như bạn cần" không giống "nhanh như người dùng muốn". Chúng ta nên xem xét những điều song song thường xuyên hơn khi số lượng lõi tăng lên. –

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