ในมุมมองของฉันสถานการณ์ที่สมจริงที่สุดคือเมื่องานมีการดำเนินการอย่างหนักเพื่อให้เสร็จสมบูรณ์ วิธีการของ Shivprasad มุ่งเน้นไปที่การสร้างวัตถุ / การจัดสรรหน่วยความจำมากกว่าในการคำนวณเอง ฉันทำวิจัยเรียกวิธีต่อไปนี้:
public static double SumRootN(int root)
{
double result = 0;
for (int i = 1; i < 10000000; i++)
{
result += Math.Exp(Math.Log(i) / root);
}
return result;
}
การดำเนินการของวิธีนี้ใช้เวลาประมาณ 0.5 วินาที
ฉันเรียกมันว่า 200 ครั้งโดยใช้ Parallel:
Parallel.For(0, 200, (int i) =>
{
SumRootN(10);
});
จากนั้นฉันก็เรียกมันว่า 200 ครั้งโดยใช้วิธีที่ล้าสมัย:
List<Task> tasks = new List<Task>() ;
for (int i = 0; i < loopCounter; i++)
{
Task t = new Task(() => SumRootN(10));
t.Start();
tasks.Add(t);
}
Task.WaitAll(tasks.ToArray());
กรณีแรกเสร็จสมบูรณ์ใน 26656ms วินาทีใน 24478ms ฉันทำซ้ำหลายครั้ง ทุกครั้งที่วิธีที่สองนั้นรวดเร็วกว่าเล็กน้อย