Comment définir le nombre maximum de threads parallèles

This article was translated from English: Does it need improvement?
Translated
View the article in English

Lors de la lecture de grands volumes de BarCodes, s'appuyer sur un processus à un seul thread peut créer des goulets d'étranglement au niveau des performances et limiter l'évolutivité. Cependant, l'utilisation de threads parallèles permet à votre application de traiter plusieurs images simultanément, ce qui multiplie efficacement la puissance de traitement totale et réduit considérablement le temps nécessaire pour terminer un travail par lots.

La fixation d'une limite maximale pour ces threads est un moyen efficace d'optimiser les performances. Elle garantit que l'application utilise tout le potentiel du matériel en équilibrant la charge de travail entre les cœurs du processeur. Cette approche permet de maximiser l'efficacité, de maintenir le bon fonctionnement de l'application tout en obtenant les résultats les plus rapides possibles.

IronBarcode offre un moyen simple de contrôler cette limite, garantissant ainsi des performances optimales de la machine. La section suivante montre comment définir facilement ces limites de threads.



Définir le nombre maximal de threads parallèles

Pour cet exemple, nous utiliserons un grand ensemble d'images de BarCode pour illustrer l'évolutivité et l'efficacité de l'utilisation d'un processus multithread au lieu d'un processus single-thread. Vous pouvez télécharger le dossier d'images ici.

Pour configurer IronBarcode afin qu'il utilise plus d'un thread, un nouvel objet BarcodeReaderOptions est d'abord instancié avec Multithreaded réglé sur true. Ensuite, la propriété MaxParallelThreads est définie par l'attribution d'une valeur entière. Par défaut, MaxParallelThreads est fixé à 4.

Après avoir configuré les paramètres, un grand nombre d'images de codes-barres sont importées depuis le dossier. Ensuite, à l'aide d'une boucle, le répertoire d'images de codes-barres est lu en utilisant la méthode Read, en transmettant le chemin d'accès au fichier et les BarcodeReaderOptions configurées. Enfin, la valeur et le type du code-barres sont affichés en accédant au BarcodeResults.

:path=/static-assets/barcode/content-code-examples/how-to/set-max-parallel-thread.cs
using IronBarCode;
using System;
using System.IO;

int maxParallelThreads = 4;


var optionsFaster = new BarcodeReaderOptions
{
    // Set Max threads to 4
    Multithreaded = true,
    MaxParallelThreads = maxParallelThreads,
};

// Dynamically get the "images" folder in the current directory
string folderPath = Path.Combine(Directory.GetCurrentDirectory(), "images");

// Retrieve all JPG files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");

foreach (var file in pdfFiles)
{
    // Read the barcode
    var results = BarcodeReader.Read(file);

    foreach (var result in results)
    {
        // Show the type and value for every barcode found
        Console.WriteLine($"Value: {result.Value}, Type: {result.BarcodeType}");
            
    }
    
}

Imports IronBarCode
Imports System
Imports System.IO

Dim maxParallelThreads As Integer = 4

Dim optionsFaster As New BarcodeReaderOptions With {
    .Multithreaded = True,
    .MaxParallelThreads = maxParallelThreads
}

' Dynamically get the "images" folder in the current directory
Dim folderPath As String = Path.Combine(Directory.GetCurrentDirectory(), "images")

' Retrieve all JPG files in the directory
Dim pdfFiles = Directory.GetFiles(folderPath, "*.jpg")

For Each file In pdfFiles
    ' Read the barcode
    Dim results = BarcodeReader.Read(file)

    For Each result In results
        ' Show the type and value for every barcode found
        Console.WriteLine($"Value: {result.Value}, Type: {result.BarcodeType}")
    Next
Next
$vbLabelText   $csharpLabel

Sortie

Sortie multithread

Comme le montre la sortie de la console, elle affiche la valeur et le type du code-barres pour chaque image correspondante.

Configuration du nombre maximal de threads parallèles

Lorsque la propriété Multithreaded est définie sur true, la propriété MaxParallelThreads est définie par défaut sur 4. Bien qu'il n'y ait pas de limite stricte pour l'entier assigné à MaxParallelThreads, la définition d'une valeur supérieure à la capacité logique de votre matériel peut en fait entraîner une diminution des performances. En effet, le processeur ne peut pas gérer un changement de contexte excessif, ce qui risque d'entraîner une surcharge de travail plutôt qu'une augmentation de la vitesse. Ainsi, la valeur correcte deMaxParallelThreads dépend des spécifications de l'ordinateur, et les développeurs doivent faire des essais pour trouver la valeur optimale pour leur environnement.

Dans cet exemple, nous présenterons le même scénario multithread que précédemment, mais avec un minuteur en place pour comparer la valeur par défaut de 4 à l'utilisation de Environment.ProcessorCount pour utiliser tous les threads disponibles. Dans notre cas, nous utilisons un ordinateur avec 32 processeurs logiques, donc MaxParallelThreads sera fixé à 32.

:path=/static-assets/barcode/content-code-examples/how-to/set-max-parallel-thread-performance.cs
using IronBarCode;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;

// Set the max parallel threads to the number of processor cores
int maxParallelThreads = Environment.ProcessorCount;


var optionsFaster = new BarcodeReaderOptions
{
    // Set Max threads to the number of processor cores
    Multithreaded = true,
    MaxParallelThreads = maxParallelThreads,
    ExpectMultipleBarcodes = true,
};

// Start timing the process
var stopwatch = Stopwatch.StartNew();
// Dynamically get the "images" folder in the current directory
string folderPath = Path.Combine(Directory.GetCurrentDirectory(), "images");

// Check if directory exists to prevent crashes
if (!Directory.Exists(folderPath))
{
    Console.WriteLine($"Error: The directory '{folderPath}' does not exist.");
    return;
}

// Get all JPG files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");

foreach (var file in pdfFiles)
{
    // Read the barcode
    var results = BarcodeReader.Read(file);

    if (results.Any())
    {
        Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}");
        foreach (var result in results)
        {
            Console.WriteLine($"  Value: {result.Value}, Type: {result.BarcodeType}");
            
        }
    }
}

stopwatch.Stop();

// Print number of images the barcode reader could decode
Console.WriteLine($" Max parallel threads of {maxParallelThreads} with {stopwatch.Elapsed.TotalSeconds:F2}s");
Imports IronBarCode
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Linq

' Set the max parallel threads to the number of processor cores
Dim maxParallelThreads As Integer = Environment.ProcessorCount

Dim optionsFaster As New BarcodeReaderOptions With {
    .Multithreaded = True,
    .MaxParallelThreads = maxParallelThreads,
    .ExpectMultipleBarcodes = True
}

' Start timing the process
Dim stopwatch As Stopwatch = Stopwatch.StartNew()
' Dynamically get the "images" folder in the current directory
Dim folderPath As String = Path.Combine(Directory.GetCurrentDirectory(), "images")

' Check if directory exists to prevent crashes
If Not Directory.Exists(folderPath) Then
    Console.WriteLine($"Error: The directory '{folderPath}' does not exist.")
    Return
End If

' Get all JPG files in the directory
Dim pdfFiles As String() = Directory.GetFiles(folderPath, "*.jpg")

For Each file As String In pdfFiles
    ' Read the barcode
    Dim results = BarcodeReader.Read(file)

    If results.Any() Then
        Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}")
        For Each result In results
            Console.WriteLine($"  Value: {result.Value}, Type: {result.BarcodeType}")
        Next
    End If
Next

stopwatch.Stop()

' Print number of images the barcode reader could decode
Console.WriteLine($" Max parallel threads of {maxParallelThreads} with {stopwatch.Elapsed.TotalSeconds:F2}s")
$vbLabelText   $csharpLabel

Sortie

Temps de traitement avec 4 threads

4 Processeur

Le temps de traitement pour ce processus est de 84 secondes.

Temps de traitement avec l'environnement ProcessorCount

32 Processeur

Comme vous pouvez le constater, le temps de traitement de cette opération est de 53 secondes, ce qui est nettement plus rapide que de l'exécuter avec seulement quatre threads. Veuillez toutefois noter que l'utilisation d'un plus grand nombre de threads ne garantit pas une amélioration des performances, car celles-ci dépendent du processeur hôte. Une règle générale consiste à utiliser le nombre maximum de processeurs disponibles moins un, afin de s'assurer qu'il reste un seul thread disponible pour d'autres opérations du système.

Avertissement L'environnement du projet doit être configuré pour permettre le multithreading. Sinon, le réglage de Multithreaded sur true et l'augmentation de MaxParallelThreads n'amélioreront pas la vitesse du processus et pourraient même la diminuer.

Questions Fréquemment Posées

À quoi sert la définition d'un nombre maximal de threads parallèles dans IronBarcode ?

Définir le nombre maximal de threads parallèles permet d'optimiser les performances de la génération de codes-barres en utilisant efficacement les ressources du système, notamment lors du traitement d'un grand nombre de codes-barres en masse.

Comment puis-je configurer le nombre maximum de threads parallèles dans IronBarcode ?

Vous pouvez configurer le nombre maximal de threads parallèles dans IronBarcode en utilisant la méthode appropriée dans votre code C# pour définir le nombre de threads souhaité pour les tâches de génération de codes-barres.

Pourquoi est-il important d'optimiser les performances pour la création de codes-barres en masse ?

L'optimisation des performances pour la création de codes-barres en masse garantit l'efficacité et la rapidité du processus, réduisant ainsi le temps et les ressources nécessaires pour générer un grand volume de codes-barres, ce qui est essentiel pour les applications exigeant un débit élevé.

Quels sont les avantages de l'utilisation du traitement parallèle dans IronBarcode ?

Le traitement parallèle dans IronBarcode permet une génération plus rapide des codes-barres en utilisant plusieurs cœurs de CPU, ce qui entraîne une amélioration des performances de l'application et une réduction du temps de traitement pour les tâches de codes-barres à grande échelle.

La configuration d'un trop grand nombre de threads parallèles peut-elle avoir un effet négatif sur les performances ?

Oui, la configuration d'un trop grand nombre de threads parallèles peut entraîner une contention des ressources et une augmentation des frais généraux, ce qui risque de réduire les performances. Il est important de trouver une configuration équilibrée qui corresponde aux capacités de votre système.

Quelles sont les considérations à prendre en compte lors du choix du nombre de threads parallèles ?

Parmi les éléments à prendre en compte figurent le nombre de cœurs de CPU disponibles, la charge de travail du système et la nature de vos tâches de génération de codes-barres. Il est préférable d'expérimenter différents paramètres pour trouver la configuration optimale.

Existe-t-il un paramètre par défaut pour les threads parallèles dans IronBarcode ?

IronBarcode peut avoir un paramètre par défaut pour les threads parallèles, mais il est recommandé de personnaliser ce paramètre en fonction des besoins spécifiques de votre application pour obtenir les meilleures performances.

Comment IronBarcode gère-t-il la gestion des threads ?

IronBarcode s'appuie sur les capacités de threading de .NET pour gérer le traitement parallèle, ce qui permet aux développeurs de spécifier le nombre de threads afin d'optimiser efficacement les performances.

Puis-je modifier le nombre de threads parallèles de manière dynamique pendant l'exécution ?

Il n'est pas recommandé de modifier dynamiquement le nombre de threads parallèles pendant l'exécution, car cela peut entraîner des incohérences et affecter la stabilité des performances. Il est préférable de définir la configuration avant de commencer le processus de génération de codes-barres.

Quels sont les cas d'utilisation courants pour définir le nombre maximal de threads parallèles dans la génération de BarCode ?

Les cas d'utilisation courants comprennent les applications qui nécessitent une génération de codes-barres à grande vitesse, telles que les systèmes de gestion des stocks, les systèmes de points de vente au détail et les applications logistiques où le traitement rapide de grands volumes de codes-barres est essentiel.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 2,070,733 | Version : 2026.2 vient de sortir