Parallelizing method with foreach loop C#
Hello.
So I am currently working on a project and now I feel the need to try and speed up the execution. I have a method with a foreach loop in it that I wish to parallelize as efficiently as possible.
This is how it looks now:
public void Simulate()
{
List<Coordinate> Locations = retrieveLocations();
int min = int.MaxValue;
int bestX = -1, bestY = -1;
foreach (Coordinate currPos in Locations)
{
string[,] tempMap = new string[globalMap.GetLength(0), globalMap.GetLength(1)];
matrixCopy(globalMap, tempMap);
int result = processData(currPos, tempMap);
if (result < min)
{
min = result;
bestX = currPos.X;
bestY = currPos.Y;
}
}
MessageBox.Show(bestX + " " + bestY + " " + min);
}
I would like to change the foreach loop to use Parallel.ForEach or perhaps use PLINQ. My concerns are how I can find the minimal value with as little locking as possible. Also I want to preserve some other values than just the minimum.
Another issue is the globalMap, is it good to copy it like I do now? All threads can't work on the original at the same time because they change the data. But perhaps I should do the copy in my processData()-method? Any thoughts?