Một vấn đề với các giải pháp vòng lặp for ở trên là đối với mảng đầu vào sau với tất cả các giá trị dương, kết quả tổng là âm:
int[] arr = new int[] { Int32.MaxValue, 1 };
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Console.WriteLine(sum);
Tổng là -2147483648, vì kết quả dương quá lớn đối với kiểu dữ liệu int và tràn thành giá trị âm.
Đối với cùng một mảng đầu vào, các đề xuất arr.Sum () gây ra một ngoại lệ tràn được ném ra.
Một giải pháp mạnh mẽ hơn là sử dụng kiểu dữ liệu lớn hơn, chẳng hạn như "dài" trong trường hợp này, cho "tổng" như sau:
int[] arr = new int[] { Int32.MaxValue, 1 };
long sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Cải tiến tương tự cũng hoạt động đối với tính tổng của các kiểu dữ liệu số nguyên khác, chẳng hạn như short và sbyte. Đối với các mảng kiểu dữ liệu số nguyên không dấu như uint, ushort và byte, việc sử dụng long không dấu (ulong) cho tổng sẽ tránh được ngoại lệ tràn.
Giải pháp vòng lặp for cũng nhanh hơn nhiều lần so với Linq .Sum ()
Để chạy nhanh hơn nữa, gói HPCsharp nuget triển khai tất cả các phiên bản .Sum () này cũng như các phiên bản SIMD / SSE và các phiên bản song song đa lõi, cho hiệu suất nhanh hơn nhiều lần.