Конвертировать цикл For в цикл Parallel.For - PullRequest
1 голос
/ 29 июня 2010
public void DoSomething(byte[] array, byte[] array2, int start, int counter)
{

    int length = array.Length;
    int index = 0;

         while (count >= needleLen)
         {
             index = Array.IndexOf(array, array2[0], start, count - length + 1);

             int i = 0;
             int p = 0;

             for (i = 0, p = index; i < length; i++, p++)
             {
                  if (array[p] != array2[i])
                  {
                       break;
                  }
             }

1 Ответ

2 голосов
/ 29 июня 2010

Учитывая, что ваш цикл for, по-видимому, использует тело цикла в зависимости от упорядочения, он, скорее всего, не подходит для распараллеливания.

Однако вы не показываете «работу», связанную с этим, поэтомуТрудно сказать, что он делает.Поскольку цикл опирается как на i, так и на p, и кажется, что они будут различаться независимо, вряд ли его можно переписать с использованием простого Parallel.For без переделки или переосмысления вашего алгоритма.

Для того, чтобы тело цикла моглобыть хорошим кандидатом для распараллеливания, обычно он должен быть независимым от порядка и не иметь ограничений на порядок.Тот факт, что вы основываете свой цикл на двух независимых переменных, говорит о том, что эти требования не действительны в этом алгоритме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...