Traiter un foreach en parallèle

Soyez le premier à donner votre avis sur cette source.

Vue 10 077 fois - Téléchargée 783 fois

Description

Faire des boucles ForEach, c'est pratique. Mais si on a beaucoup d'éléments à traiter, pourquoi ne pas répartir la charge sur tous les processeurs du système ?

Ce petit bout de code permet d'exécuter du code sur chaque élément d'une collection, en parallèle sur chaque processeur du système.

Source / Exemple :


//On a une collection d'objets
IEnumerable<MaClass> collection;

//L'action à réaliser
Action<MaClass> action = delegate(MaClass item)
{
    Console.WriteLine(item.ToString());
}

//L'appel de la boucle
try
{
    Parallel.ForEach<MaClass>(collection, action);
}
catch(ParallelException ex)
{
    //On peut récupérer pour chaque item l'exception dans son traitement
    // via ex.Exceptions
}

Conclusion :


C'est un peu un clone de Microsoft Parallel Extensions, mais le but était didactique, et aussi parce que je n'ai pas de dépendance au framework 3.0.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
samedi 20 janvier 2007
Statut
Membre
Dernière intervention
14 janvier 2010

merci a toi désolé j'avais pas fait attention a une methode qui tuait mon outil d'encodage et donc forcement la second instance en parallèle vu que il ya forcement un qui finira le premier.

Dslé merci.
Messages postés
153
Date d'inscription
vendredi 9 août 2002
Statut
Membre
Dernière intervention
18 septembre 2009

Là, ça n'est plus de mon ressort ;) Bon courage :)
Messages postés
5
Date d'inscription
samedi 20 janvier 2007
Statut
Membre
Dernière intervention
14 janvier 2010

Merci mais je l'ai fait et l'encodage se déroule entier pour certains et à un certains pourcentages pour d'autres , je crois que a un moment ou a un autre le processus d'encodage est interrompu peut être par les nouveaux processus créé
Messages postés
153
Date d'inscription
vendredi 9 août 2002
Statut
Membre
Dernière intervention
18 septembre 2009

Si ça ne sont pas les mêmes items qui sont encodées, ce que tu peux faire, c'est loguer dans un fichier TOUTES les infos nécessaires qui pourraient t'aider à savoir si ton encodage fonctionne : titre encodé, exceptions, etc...
Dans mon code, l'item suivante n'est traitée que si une item a terminé et si on ne dépasse pas le nombre d'items à traiter en même temps...
Messages postés
5
Date d'inscription
samedi 20 janvier 2007
Statut
Membre
Dernière intervention
14 janvier 2010

ce n'est pas un mes items qui plante vu que a chaque test ce n'est pas le meme titre ni le meme nombre qui ne sont encodés.
je me demande si dans l'optique de faire les traitements en parallèle , meme si un thread n'a pas terminé sa tache l'abandonne afin de suivre l'autre sur les items suivants.
Désolé si c'est pas cohérent mais je cherche une explication a ce phénomène.
Afficher les 22 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.