2010-06-29 267 views
1
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; 
        } 
      } 

回答

2

鑑於您的for循環似乎使用依賴於排序的循環體,它很可能不是並行化的候選項。

但是,您並未顯示此處涉及的「工作」,因此很難說明它在做什麼。由於循環依賴於i和p,並且它們看起來會獨立變化,所以不可能使用簡單的Parallel.For重寫,而無需重新編制或重新考慮算法。

爲了使循環體成爲並行化的良好候選者,它通常需要與順序無關並且沒有排序約束。事實上,你將循環放在兩個獨立的變量上,這表明這些要求在這個算法中是無效的。