Shand Ramzi

Shand Ramzi

  • NA
  • 5
  • 2.2k

Parallelizing method with foreach loop C#

Oct 10 2011 11:36 PM
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?

Answers (5)