2010-06-29 5 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; 
        } 
      } 

Répondre

2

Étant donné que votre boucle for semble utiliser un corps de boucle dépendant de la commande, il n'est probablement pas candidat à la parallélisation.

Cependant, vous ne montrez pas le "travail" impliqué ici, il est donc difficile de dire ce qu'il fait. Puisque la boucle repose à la fois sur i et sur p, et qu'il semble qu'ils varient indépendamment, il est peu probable qu'elle soit réécrite en utilisant un simple Parallel.For sans retravailler ou repenser votre algorithme.

Pour qu'un corps de boucle soit un bon candidat à la parallélisation, il doit généralement être indépendant de l'ordre et ne pas avoir de contraintes d'ordre. Le fait que vous basiez votre boucle sur deux variables indépendantes suggère que ces exigences ne sont pas valides dans cet algorithme.