Tôi có một chút bối rối về Parallel.ForEach
. Chính xác
là Parallel.ForEach
gì và nó làm gì?
Vui lòng không tham khảo bất kỳ liên kết MSDN.
Đây là một ví dụ đơn giản:
string[] lines = File.ReadAllLines(txtProxyListPath.Text);
List<string> list_lines = new List<string>(lines);
foreach (string line in list_lines)
{
//My Stuff
}
Làm thế nào tôi có thể viết lại ví dụ này với Parallel.ForEach
?
Điều này có thể đã được trả lời ở đây stackoverflow.com/questions/3789998/ từ
—
Ujjwal Manandhar
@UjjwalManandhar Điều đó thực sự khá khác biệt, vì nó hỏi về sự khác biệt giữa
—
Sậy Copsey
Parallel
lớp và sử dụng PLINQ.
Những người khác đã trả lời làm thế nào bạn có thể viết lại. Vì vậy, nó làm gì? Nó thực hiện một "hành động" trên mỗi mục trong bộ sưu tập, giống như một bình thường
—
Jeppe Stig Nielsen
foreach
. Sự khác biệt là phiên bản song song có thể thực hiện nhiều "hành động" cùng một lúc. Trong hầu hết các trường hợp (tùy thuộc vào máy tính nào đang chạy mã và mức độ bận rộn của nó và các công cụ khác), nó sẽ nhanh hơn và đó là lợi thế quan trọng nhất. Lưu ý rằng khi bạn thực hiện song song, bạn không thể biết thứ tự các mục được xử lý. Với một thông thường (nối tiếp) foreach
, bạn được đảm bảo rằng lines[0]
đến trước, sau đó lines[1]
, v.v.
@JeppeStigNielsen Nó sẽ không luôn luôn nhanh hơn vì có chi phí đáng kể với việc làm cho mọi thứ song song. Nó phụ thuộc vào kích thước của bộ sưu tập bạn đang lặp đi lặp lại và hành động bên trong. Điều chính xác cần làm là thực sự đo lường sự khác biệt giữa việc sử dụng Parallel.ForEach () và sử dụng foreach (). Nhiều lần một foreach bình thường () là nhanh hơn.
—
Dave Black
@DaveBlack Chắc chắn. Người ta sẽ phải đo xem nó nhanh hơn hay chậm hơn, trong từng trường hợp. Tôi chỉ cố gắng để mô tả song song nói chung.
—
Jeppe Stig Nielsen