ปัญหาหนึ่งของการแก้ปัญหาสำหรับลูปข้างต้นคือสำหรับอาร์เรย์อินพุตต่อไปนี้ที่มีค่าบวกทั้งหมดผลรวมจะเป็นลบ:
int[] arr = new int[] { Int32.MaxValue, 1 };
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Console.WriteLine(sum);
ผลรวมคือ -2147483648 เนื่องจากผลลัพธ์ที่เป็นบวกนั้นใหญ่เกินไปสำหรับชนิดข้อมูล int และล้นเป็นค่าลบ
สำหรับอาร์เรย์อินพุตเดียวกันคำแนะนำ arr.Sum () ทำให้เกิดข้อยกเว้นล้น
วิธีแก้ปัญหาที่มีประสิทธิภาพมากขึ้นคือการใช้ประเภทข้อมูลที่ใหญ่กว่าเช่น "long" ในกรณีนี้สำหรับ "sum" ดังนี้:
int[] arr = new int[] { Int32.MaxValue, 1 };
long sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
การปรับปรุงเดียวกันนี้ใช้ได้กับการสรุปข้อมูลประเภทจำนวนเต็มอื่น ๆ เช่น short และ sbyte สำหรับอาร์เรย์ของชนิดข้อมูลจำนวนเต็มที่ไม่ได้ลงชื่อเช่น uint, ushort และ byte โดยใช้ long ที่ไม่ได้ลงชื่อ (ulong) สำหรับผลรวมจะหลีกเลี่ยงข้อยกเว้นล้น
โซลูชันสำหรับลูปยังเร็วกว่า Linq .um () หลายเท่า
เพื่อให้ทำงานได้เร็วยิ่งขึ้นแพ็คเกจ HPCsharp nuget จะใช้งานทั้งหมดนี้เวอร์ชัน sum () เช่นเดียวกับเวอร์ชัน SIMD / SSE และแบบขนานแบบมัลติคอร์เพื่อประสิทธิภาพที่เร็วขึ้นหลายเท่า