将for循环转换为Parallel.For循环

问题描述:

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; 
        } 
      } 

鉴于您的for循环似乎使用依赖于排序的循环体,它很可能不是并行化的候选项。

但是,您并未显示此处涉及的“工作”,因此很难说明它在做什么。由于循环依赖于i和p,并且它们看起来会独立变化,所以不可能使用简单的Parallel.For重写,而无需重新编制或重新考虑算法。

为了使循环体成为并行化的良好候选者,它通常需要与顺序无关并且没有排序约束。事实上,你将循环放在两个独立的变量上,这表明这些要求在这个算法中是无效的。