F #paralléliser création de tableau
[|for index in 1 .. items.Count()-1 -> (* create object here - complex operations *)|]
C#
Object[] newItemArray= new Object[items.Count];
Parallel.For(0, items.Count, index=>
{
/*complex stuff here*/
newItemArray[index] = new Object();
});
J'ai ci-dessus C# et F # faire la même chose. Sans le Parallel.For
, le F # est légèrement plus rapide. Avec le Parallel.For
, le C# prend moitié moins de temps à s'exécuter. Comment paralléliser correctement le F # pour obtenir le même boost de performance que le C#? La façon dont j'ai essayé jusqu'ici était Array.Parallel.Iteri
, donc je pourrais utiliser le même index dans un truc de tableau que j'ai utilisé en C#, mais il l'a ralenti au lieu de l'accélérer.
Edit:
Plus de détails sur ce que je fais:
J'ai un dénombrable de byte array array array
. J'ai un autre byte array array array
auquel je compare les autres. Je suis en train de trier l'énumérable sur% similarity et de renvoyer les 500 premiers.
Dans les deux F # et C# je fais une simple boucle imbriquée qui incrémente un compteur. Une fois la boucle bouclée sur un élément particulier de mon énumérable, je crée un tuple de (item, counter). Une fois que j'ai créé mon nouvel élément énumérable de (item, counter), je le trierai sur la variable du compteur, récupèrerai les 500 premiers et ensuite je les convertirai en un élément énumérable.
La partie que je suis en train de l'intérieur du Parallel.For est la création du IEnumerable<Tuple<item, int>>
Je suppose qu'il est temps de commencer à comparer IL ... – mydogisbox
Je sais que ce n'est pas facile mais pouvez-vous donner un exemple reproductible? Vous * Edit * n'aide pas beaucoup. – pad