У меня есть небольшая проблемка.
У меня есть двумерный массив размеров 800х600 и мне нужно для каждого ячейки массива присво
double [,] t1=new double[800,600]; double a1; double a2; double a3; for (int i = 0; i < 800; i++) //| { //| for (int j = 0; j < 600; j++) //| { //| //| a1 = ....; //| //| a2 = ....; //| 50 мсек. //| 40 сек. a3 = a1 + a2; //| //| t1[i, j] = t1[i, j] + a3; //| //| } //| } //| return t1 //|
А весь этот цикл надо повторить несколько раз (5-10 раз). Итого весь расчёт занимает 5-10 минут, что ни есть хорошо. Ведь наверняка есть способ ускорить этот цикл. Я думал надо созданием многопоточности, но опыта в этом деле пока нету. Пытался таким образом (упрощённый вид)
public double [,] t1=new double[800,600]; Parallel.For(0, 800, mThread); private void mThread(int i) { double a1; double a2; double a3; for (int j = 0; j < 600; j++) { a1 = ....; a2 = ....; a3 = a1 + a2; t1[i, j] = t1[i, j] + a3; } }
Но это как-то не помогло. Время сократилось всего лишь в два раза.
Можно ли как нибудь сделать так, чтобы запустилось 800 потоков, чтобы каждый из них вычислил значения в отдельной строке всего массива?