Как повысить производительность вложенного цикла for
Код работает верно. Однако вложенный цикл for работает 3,5 секунды, и мне приходится запускать этот метод 50 раз. Так что это занимает слишком много времени. Как я могу оптимизировать?
object.Y is jagged array [1406][21] object.dif is jagged array [1406][1405] object.E = 21
После того, как Y-образный массив заполняется double и NAN, я сортирую каждую строку, а затем нахожу индекс элементов, отличных от NAN.
Что я уже пробовал:
private void Calculate(Obj object) { double sum = 0; int i = 1406; int j = 1405; for (int t = 0; t < i; t++) { object.dif[t] = new double[j]; for (int l = 0; l < j; l++) { if (Math.Abs(t - l) > object.E) { for (int k = 0; k < object.E; k++) { sum += (object.Y[t][k] - object.Y[l][k]) * (object.Y[t][k] - object.Y[l][k]); } object.dif[t][l] = Math.Sqrt(sum); } else object.dif[t][l] = double.NaN; sum= 0; } } } //With Parallel For but because of Sum, everytime Y matrix give different results private void Calculate(Obj object) { double sum = 0; int i = 1406; int j = 1405; Parallel.For(0,i,t=>{ object.dif[t] = new double[j]; for (int l = 0; l < j; l++) { if (Math.Abs(t - l) > object.E) { for (int k = 0; k < object.E; k++) { sum += (object.Y[t][k] - object.Y[l][k]) * (object.Y[t][k] - object.Y[l][k]); } object.dif[t][l] = Math.Sqrt(sum); } else object.dif[t][l] = double.NaN; sum= 0; } }); }