Простейшая параллельная реализация:
int[,] m_indexes = new int[6, 4] { {367, 40, 74, 15},
{535, 226, 74, 15},
{368, 313, 74, 15},
{197, 316, 74, 15},
{27, 226, 74, 15},
{194, 41, 74, 15} };
var columns = Enumerable.Range(0, 4);
int[] sums = new int[4];
Parallel.ForEach(columns, column => {
int sum = 0;
for (int i = 0; i < 6; i++) {
sum += m_indexes[i, column];
}
sums[column] = sum;
});
Этот код, очевидно, может быть "обобщенным" (используйте m_indexes.GetLength(0)
и m_indexes.GetLength(1)
).
LINQ:
var sums = columns.Select(
column => {
int sum = 0;
for (int i = 0; i < 6; i++) {
sum += m_indexes[i, column];
} return sum;
}
).ToArray();
Обязательно профилируйте на реальных данных здесь , если вам действительно нужно оптимизировать производительность здесь.
Кроме того, если вы действительно заботитесь об оптимизации производительности, попробуйте загрузить свой массив так, чтобы вы суммировали по строкам. Таким образом вы получите лучшую локальность для производительности кэша.