ฉันสับสนParallel.ForEach
เล็กน้อย
มันคืออะไรParallel.ForEach
และมันทำอะไรกันแน่?
โปรดอย่าอ้างอิงลิงก์ MSDN ใด ๆ
นี่คือตัวอย่างง่ายๆ:
string[] lines = File.ReadAllLines(txtProxyListPath.Text);
List<string> list_lines = new List<string>(lines);
foreach (string line in list_lines)
{
//My Stuff
}
ฉันจะเขียนตัวอย่างนี้อีกครั้งได้Parallel.ForEach
อย่างไร
นี่อาจจะได้รับคำตอบที่นี่stackoverflow.com/questions/3789998/…
—
Ujjwal Manandhar
@UjjwalManandhar ที่จริงแล้วมันค่อนข้างแตกต่างเพราะถามถึงความแตกต่างระหว่าง
—
Reed Copsey
Parallel
ชั้นเรียนกับการใช้ PLINQ
คนอื่น ๆ ตอบว่าคุณเขียนได้อย่างไร แล้วมันจะทำอย่างไร? มันจะเป็น "การกระทำ"
—
Jeppe Stig Nielsen
foreach
ในแต่ละรายการในคอลเลกชันเหมือนปกติ ความแตกต่างคือรุ่นขนานสามารถทำ "การกระทำ" ได้หลายอย่างในเวลาเดียวกัน ในกรณีส่วนใหญ่ (ขึ้นอยู่กับคอมพิวเตอร์ที่ใช้รหัสและสิ่งที่ยุ่งและสิ่งอื่น ๆ ) มันจะเร็วขึ้นและนั่นเป็นข้อได้เปรียบที่สำคัญที่สุด ทราบว่าเมื่อคุณทำมันในแบบคู่ขนานคุณไม่สามารถรู้ในสิ่งที่สั่งซื้อรายการที่มีการประมวลผล ด้วยปกติ (ซีเรียล) foreach
คุณจะได้รับการรับประกันที่lines[0]
มาก่อนlines[1]
และอื่น ๆ
@JeppeStigNielsen มันจะไม่เร็วขึ้นเสมอเนื่องจากมีค่าใช้จ่ายที่สำคัญเมื่อทำสิ่งต่าง ๆ แบบขนาน ขึ้นอยู่กับขนาดของคอลเลกชันที่คุณกำลังทำซ้ำและการกระทำภายใน สิ่งที่ถูกต้องคือการวัดความแตกต่างระหว่างการใช้ Parallel.ForEach () และใช้ foreach () หลายครั้งที่ foreach ปกติ () เร็วขึ้น
—
เดฟแบล็ค
@DaveBlack แน่นอน หนึ่งจะต้องวัดว่ามันจะเร็วขึ้นหรือช้าลงในแต่ละกรณี ฉันแค่พยายามอธิบายการขนานกันโดยทั่วไป
—
Jeppe Stig Nielsen