Click here to Skip to main content
15,885,767 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
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:
C#
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?
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900