Comment définir le nombre maximal 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 codes-barres, le recours à un processus monothread peut créer des goulots d'étranglement en termes de performances et limiter l'évolutivité. Cependant, l'utilisation de threads parallèles permet à votre application de traiter plusieurs images simultanément, multipliant ainsi la puissance de traitement totale et réduisant considérablement le temps nécessaire pour terminer un traitement par lots.

Définir une limite maximale pour ces threads est un moyen efficace d'optimiser les performances. Elle garantit que l'application exploite pleinement le potentiel du matériel en répartissant la charge de travail entre les cœurs du processeur. Cette approche maximise l'efficacité, assurant un fonctionnement fluide de l'application tout en fournissant les résultats les plus rapides possibles.

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

Commencez avec IronBarcode



Définir le nombre maximal de threads parallèles

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

Pour configurer IronBarcode afin d'utiliser plusieurs threads, un nouvel objet BarcodeReaderOptions est d'abord instancié avec Multithreaded défini sur true. Ensuite, la propriété MaxParallelThreads est définie en lui attribuant une valeur entière. Par défaut, MaxParallelThreads est défini sur 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 à l'aide de la méthode Read , en passant le chemin du fichier et les BarcodeReaderOptions configurées. Enfin, la valeur et le type du code-barres sont affichés en accédant à 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}");
            
    }
    
}

$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.

Définition du nombre maximal de threads parallèles approprié

Lorsque la propriété Multithreaded est définie sur true, la propriété MaxParallelThreads est par défaut égale à 4. Bien qu'il n'y ait pas de limite stricte pour l'entier attribué à MaxParallelThreads , définir une valeur supérieure à la capacité des cœurs logiques de votre matériel peut en fait entraîner une diminution des performances. Cela s'explique par le fait que le processeur ne peut pas gérer un nombre excessif de changements de contexte, ce qui peut entraîner une surcharge plutôt qu'une amélioration de la vitesse. Par conséquent, la valeur correcte de MaxParallelThreads dépend des spécifications de l'ordinateur, et les développeurs doivent effectuer des tests pour trouver la valeur optimale pour leur environnement.

Dans cet exemple, nous allons illustrer le même scénario multithread que ci-dessus, mais avec une minuterie en place pour comparer la valeur par défaut de 4 à l'utilisation Environment.ProcessorCount pour utiliser tous les threads disponibles. Dans notre cas, nous utilisons un ordinateur doté de 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");
$vbLabelText   $csharpLabel

Sortie

Temps de traitement avec 4 threads

Processeur à 4 voies

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

Temps de traitement avec nombre de processeurs d'environnement

Processeur 32

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. En règle générale, il est conseillé d'utiliser le nombre maximal de processeurs disponibles moins un, afin de garantir qu'il reste un thread disponible pour les autres opérations système.

[{w:( L'environnement du projet doit être configuré pour autoriser le multithreading. Sinon, true l'option Multithreaded et augmenter MaxParallelThreads n'améliorera pas la vitesse du processus et pourrait même la diminuer.

Questions Fréquemment Posées

À quoi sert de configurer le nombre maximal de threads parallèles dans IronBarcode ?

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

Comment puis-je configurer le nombre maximal 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 souhaité de threads 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 un processus efficace et rapide, réduisant ainsi le temps et les ressources nécessaires à la génération d'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 de codes-barres plus rapide grâce à l'utilisation de plusieurs cœurs de processeur, ce qui améliore les performances de l'application et réduit le temps de traitement pour les tâches de codes-barres à grande échelle.

Un trop grand nombre de threads parallèles peut-il avoir un impact négatif sur les performances ?

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

Quels sont les éléments à prendre en compte lors du choix du nombre de threads parallèles ?

Il convient de prendre en compte le nombre de cœurs de processeur disponibles, la charge de travail du système et la nature des tâches de génération de codes-barres. Il est conseillé d'expérimenter différents paramètres afin de trouver la configuration optimale.

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

IronBarcode peut avoir une configuration 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 afin d'obtenir les meilleures performances.

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

IronBarcode exploite les capacités de traitement parallèle de .NET pour gérer le traitement parallèle, permettant aux développeurs de spécifier le nombre de threads afin d'optimiser efficacement les performances.

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

Il est déconseillé 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 configurer le processus avant de lancer la génération des codes-barres.

Quels sont quelques cas d'utilisation courants pour la configuration du nombre maximal de threads parallèles dans la génération de codes-barres ?

Les cas d'utilisation courants incluent les applications nécessitant une génération de codes-barres à grande vitesse, telles que les systèmes de gestion des stocks, les systèmes de point 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,035,202 | Version : 2025.12 vient de sortir