Maison >développement back-end >C++ >Comment Parallel.ForEach améliore-t-il les performances par rapport à une boucle Foreach traditionnelle dans .NET ?

Comment Parallel.ForEach améliore-t-il les performances par rapport à une boucle Foreach traditionnelle dans .NET ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-06 00:36:38662parcourir

How Does Parallel.ForEach Improve Performance Compared to a Traditional Foreach Loop in .NET?

Traitement parallèle avec Parallel.ForEach

La programmation parallèle améliore les performances des applications en exploitant plusieurs cœurs de processeur. Parallel.ForEach est une construction puissante qui simplifie le traitement parallèle dans les applications .NET.

Foreach Loop vs. Parallel.ForEach

La boucle foreach traditionnelle effectue des itérations de manière séquentielle sur un un seul fil. Parallel.ForEach, quant à lui, répartit la charge de travail sur plusieurs threads, permettant l'exécution simultanée d'itérations.

Caractéristiques des boucles Foreach :

  • Exécution séquentielle d'itérations
  • Utilisation d'un seul thread
  • Idéal pour les opérations rapides où la surcharge de thread n'est pas significative

Caractéristiques de Parallel.ForEach :

  • Exécution parallèle d'itérations
  • Plusieurs utilisation des threads
  • Bénéfique pour les opérations lentes où la parallélisation s'améliore performances

Conversion en Parallel.ForEach

Pour convertir l'extrait de code donné en Parallel.ForEach :

Parallel.ForEach(list_lines, line =>
{
    // My Stuff
});

Exemple

L'exemple suivant montre la différence entre un foreach boucle et Parallel.ForEach :

using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace ParallelForEachExample
{
    class Program
    {
        static void Main()
        {
            var lines = File.ReadAllLines("proxylist.txt");
            var list_lines = new List<string>(lines);

            Console.WriteLine("Traditional foreach loop");
            var watch = Stopwatch.StartNew();
            foreach (var line in list_lines)
            {
                Console.WriteLine(line);
                Thread.Sleep(10);
            }
            watch.Stop();
            Console.WriteLine($"foreach loop execution time: {watch.ElapsedMilliseconds} ms");

            Console.WriteLine("Using Parallel.ForEach");
            watch = Stopwatch.StartNew();
            Parallel.ForEach(list_lines, line =>
            {
                Console.WriteLine(line);
                Thread.Sleep(10);
            });
            watch.Stop();
            Console.WriteLine($"Parallel.ForEach() execution time: {watch.ElapsedMilliseconds} ms");
        }
    }
}

Output

La sortie démontrera que Parallel.ForEach exécute les itérations en parallèle, réduisant ainsi le temps de traitement global par rapport au boucle foreach traditionnelle.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn