Limiter le parallélisme en C#
Lors de la gestion de grands ensembles de données, il est souvent nécessaire d'effectuer des opérations simultanées pour améliorer les performances. Cependant, il est crucial de contrôler le nombre de tâches parallèles pour éviter de surcharger le système. Cet article explique comment limiter le nombre maximum de tâches parallèles en C# et garantir un traitement ordonné.
Limiter le parallélisme maximum
Pour limiter le nombre maximum de messages traités simultanément, vous pouvez utiliser la méthode Parallel.ForEach combinée à l'option MaxDegreeOfParallelism. Voici un exemple :
Parallel.ForEach(messages, new ParallelOptions { MaxDegreeOfParallelism = 10}, msg => { // Logic Process(msg); });
Dans cet exemple, MaxDegreeOfParallelism est défini sur 10, ce qui signifie que seuls 10 messages maximum seront traités simultanément, quel que soit le nombre de messages dans la collection.
Traitement ordonné
L'ordre d'exécution des tâches n'est pas garanti lors de l'utilisation du parallélisme par défaut. Cependant, si vous devez vous assurer que les messages sont traités dans le même ordre que la collection, vous pouvez mettre en œuvre une approche personnalisée.
Une solution consiste à créer une tâche distincte pour chaque message et à gérer manuellement leur séquence d'exécution. Voici un exemple simplifié :
// List of message tasks var tasks = new List<Task>(); // Add tasks to the list foreach (var msg in messages) { tasks.Add(Task.Factory.StartNew(() => { Process(msg); })); } // Execute tasks sequentially foreach (var task in tasks) { task.Wait(); }
Cette approche garantit que les tâches sont exécutées dans l'ordre exact de la collection d'entrées.
Conclusion
En tirant parti de Parallel.ForEach et MaxDegreeOfParallelism, vous pouvez contrôler le nombre maximum de tâches parallèles en C#. De plus, vous pouvez mettre en œuvre des solutions personnalisées pour garantir un traitement ordonné si nécessaire. Ces techniques permettent d'optimiser les performances et d'éviter la surcharge des ressources lorsque vous traitez de grands ensembles de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!