Comment utiliser Async et Multithread en C# ; avec IronBarcode
Async et multithreading dans IronBarcode optimisent différemment les performances de lecture de codes-barres - async empêche le blocage du thread principal pendant les opérations d'E/S tandis que multithreading traite plusieurs codes-barres simultanément à travers les cœurs du CPU.
Les développeurs confondent souvent les opérations Async et Multithreading. Les deux méthodes améliorent les performances et l'efficacité des programmes en optimisant l'utilisation des ressources du système et en réduisant la durée d'exécution. Cependant, elles diffèrent en termes d'approche, de mécanismes et de cas d'utilisation. IronBarcode prend en charge les deux approches. Cet article explore leurs différences et leur mise en œuvre à l'aide d'IronBarcode.
Démarrage rapide : Exemple de lecture de code-barres asynchrone et multithread
Utilisez cet exemple en une ligne pour démarrer instantanément avec IronBarcode. Il montre à quel point il est facile de combiner les options de lecture asynchrone et multithread pour scanner plusieurs images de codes-barres en parallèle avec un minimum de configuration.
-
Installez IronBarcode avec le Gestionnaire de Packages NuGet
PM > Install-Package BarCode -
Copiez et exécutez cet extrait de code.
var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true }); -
Déployez pour tester sur votre environnement de production.
Commencez à utiliser IronBarcode dans votre projet dès aujourd'hui avec un essai gratuit
Flux de travail minimal (5 étapes)
- Téléchargez la bibliothèque C# pour la prise en charge asynchrone et multithread.
- Utilisez les méthodes `ReadAsync` et `ReadPdfAsync` pour la lecture asynchrone des codes-barres à partir d'images et de fichiers PDF.
- Activez le multithreading en définissant la propriété **Multithreaded** sur 'true'.
- Spécifiez le nombre de threads parallèles à l'aide de la propriété **MaxParallelThreads**
- Vérifiez la comparaison des performances entre la lecture de codes-barres normale, asynchrone et multithread
Comment lire des BarCodes de manière asynchrone avec IronBarcode?
La lecture asynchrone permet aux opérations longues ou bloquantes de se poursuivre sans bloquer l'exécution du thread principal. En C#, utilisez les mots clés async et await avec des méthodes prenant en charge des fonctionnalités asynchrones. Cette approche ne crée pas de fils de discussion supplémentaires, mais libère le fil de discussion actuel. Bien que le fil d'exécution principal initie et gère des tâches, il ne reste pas exclusivement consacré à une seule tâche. Le thread principal revient lorsque la méthode asynchrone requiert son intervention, ce qui lui permet de se consacrer à d'autres tâches lorsqu'il n'en a pas besoin, ce qui est particulièrement utile pour les tâches liées aux E/S, telles que la lecture/écriture de fichiers ou les requêtes réseau.
Prenons l'exemple de la lecture de codes-barres. Le processus implique :
- Lecture du fichier
- Application des options de lecture
- Décodage du code-barres
Pendant la lecture du fichier, la tâche principale peut être libérée. Cela profite aux scénarios comportant plusieurs fichiers d'images ou des PDF volumineux, comme le démontre notre tutoriel sur la lecture des codes-barres.
Utilisez les méthodes ReadAsync et ReadPdfAsync pour lire les codes-barres de manière asynchrone pour les images et les documents PDF, respectivement. Avant de mettre en œuvre des opérations asynchrones, assurez-vous d'avoir installé IronBarcode via NuGet dans votre projet.
:path=/static-assets/barcode/content-code-examples/how-to/async-multithread-async.cs
using IronBarCode;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
List<string> imagePaths = new List<string>() { "image1.png", "image2.png" };
// Barcode reading options
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
ExpectMultipleBarcodes = true
};
// Read barcode using Async
BarcodeResults asyncResult = await BarcodeReader.ReadAsync(imagePaths, options);
// Print the results to console
foreach (var result in asyncResult)
{
Console.WriteLine(result.ToString());
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks
Private imagePaths As New List(Of String)() From {"image1.png", "image2.png"}
' Barcode reading options
Private options As New BarcodeReaderOptions() With {.ExpectMultipleBarcodes = True}
' Read barcode using Async
Private asyncResult As BarcodeResults = await BarcodeReader.ReadAsync(imagePaths, options)
' Print the results to console
For Each result In asyncResult
Console.WriteLine(result.ToString())
Next result
L'extrait de code ci-dessus instancie une Liste de chemins d'images à lire de manière asynchrone par IronBarcode. Pour lire les images, utilisez la méthode ReadAsync de la classe BarcodeReader. Spécifiez le imagePaths et les options de lecture. Pour les options de configuration avancées, consultez notre guide sur les paramètres du lecteur de codes-barres.
Cette méthode d'opération asynchrone est également disponible pour la lecture des codes-barres dans les documents PDF via ReadPdfAsync dans la même classe. Pour les configurations de lecture PDF spécifiques, consultez notre Guide des paramètres du lecteur de codes-barres PDF.
Quand devrais-je utiliser la lecture asynchrone plutôt que les méthodes normales?
La lecture asynchrone excelle dans plusieurs scénarios :
-
Applications d'interface utilisateur : Applications Windows Forms ou WPF nécessitant une réactivité de l'interface utilisateur. Async permet d'éviter le gel de l'interface lors de la lecture des codes-barres.
-
Applications web : Applications ASP.NET gérant plusieurs requêtes simultanées sans bloquer les threads, notamment lors du traitement des images de codes-barres téléchargées.
-
Traitement par lots : lecture séquentielle de plusieurs images de codes-barres ou de PDF, permettant à d'autres tâches de s'exécuter pendant les opérations d'E/S.
- Opérations réseau : Lecture de codes-barres à partir de sources ou d'URL distantes, comme le montre notre exemple lire des codes-barres à partir d'une URL de manière asynchrone.
Pourquoi la lecture asynchrone améliore-t-elle la réactivité des applications ?
La lecture asynchrone améliore la réactivité en libérant le thread principal pendant les opérations liées aux entrées/sorties. Lorsqu'IronBarcode lit un fichier image sur le disque ou traite un PDF, le fil d'exécution n'attend pas au ralenti. Cela est particulièrement important lorsqu'il s'agit de :
- Fichiers d'images volumineux nécessitant un temps de chargement important
- PDF avec plusieurs pages contenant des codes-barres
- Sources d'images en réseau
- Scénarios nécessitant des filtres de correction d'image avant la détection des codes-barres
Quels sont les pièges courants lors de l'utilisation de la lecture asynchrone de codes-barres ?
Lors de la mise en œuvre de la lecture asynchrone de codes-barres, faites attention à ces problèmes courants :
-
Blocages : Évitez
ResultouWait()sur les méthodes asynchrones dans les contextes d'interface utilisateur. Utilisez toujoursawaittout au long de la chaîne d'appels. -
Gestion des exceptions : Enveloppez les appels asynchrones dans des blocs try-catch, car les exceptions dans les méthodes asynchrones peuvent ne pas se propager comme prévu.
-
Changement de contexte : Envisagez l'utilisation de
ConfigureAwait(false)lorsque vous n'avez pas besoin de revenir au contexte de synchronisation d'origine. - Fausses idées sur les performances : L'asynchronisme n'accélère pas les opérations individuelles ; il améliore la réactivité des applications. Pour améliorer la vitesse avec plusieurs images, envisagez le multithreading.
Pour le dépannage des problèmes liés à async, consultez notre guide de dépannage de la reconnaissance des codes-barres.
Comment activer la lecture multithread des BarCodes?
Contrairement aux opérations asynchrones, le multithreading exécute un processus unique sur plusieurs threads simultanément. Au lieu d'une exécution séquentielle dans un seul thread, le multithreading répartit les tâches entre plusieurs threads pour une exécution simultanée. Le multithreading nécessite plusieurs cœurs d'unité centrale, car ces cœurs exécutent indépendamment les threads. Tout comme les opérations asynchrones, le multithreading améliore les performances et la réactivité des applications.
Dans IronBarcode, activez le multithreading en définissant la propriété Multithreaded et en spécifiant le nombre maximal de cœurs pour l'exécution simultanée à l'aide de MaxParallelThreads dans BarcodeReaderOptions. La valeur par défaut de MaxParallelThreads est 4, ajustable en fonction des cœurs de processeur disponibles. Pour des configurations de performances optimales, consultez notre guide des options de vitesse de lecture.
:path=/static-assets/barcode/content-code-examples/how-to/async-multithread-multithread.cs
using IronBarCode;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
List<string> imagePaths = new List<string>(){"test1.jpg", "test2.png"};
// Barcode reading options
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
Multithreaded = true,
MaxParallelThreads = 4,
ExpectMultipleBarcodes = true
};
// Read barcode with multithreaded enabled
BarcodeResults results = BarcodeReader.Read(imagePaths, options);
// Print the results to console
foreach (var result in results)
{
Console.WriteLine(result.ToString());
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks
Private imagePaths As New List(Of String)() From {"test1.jpg", "test2.png"}
' Barcode reading options
Private options As New BarcodeReaderOptions() With {
.Multithreaded = True,
.MaxParallelThreads = 4,
.ExpectMultipleBarcodes = True
}
' Read barcode with multithreaded enabled
Private results As BarcodeResults = BarcodeReader.Read(imagePaths, options)
' Print the results to console
For Each result In results
Console.WriteLine(result.ToString())
Next result
Quel est le niveau d'amélioration des performances auquel je peux m'attendre ?
Lisons deux exemples d'images et comparons les temps de lecture pour des opérations normales, asynchrones et multithread.
| Lecture normale | Lecture asynchrone | Lecture multithread (4 cœurs) |
|---|---|---|
| 1,75 seconde | 1,67 seconde | 1,17 seconde |
Questions Fréquemment Posées
Quelle est la différence entre async et multithreading lors de la lecture de codes-barres ?
Avec IronBarcode, les opérations asynchrones évitent de bloquer le thread principal pendant les tâches d'E/S comme la lecture de fichiers, tandis que le multithreading traite plusieurs codes-barres simultanément sur les cœurs du processeur. L'asynchronisme utilise les mots-clés async/await pour libérer le fil d'exécution principal pendant les opérations longues, tandis que le multithreading crée plusieurs fils d'exécution pour gérer le traitement des codes-barres en parallèle.
Comment mettre en œuvre la lecture asynchrone de codes-barres en C# ?
IronBarcode fournit les méthodes ReadAsync() et ReadPdfAsync() pour la lecture asynchrone de codes-barres. Il suffit d'utiliser ces méthodes avec les mots-clés async/await en C# pour lire les codes-barres des images et des PDF sans bloquer le fil d'exécution principal. Cette méthode est particulièrement utile lors du traitement de plusieurs fichiers d'images ou de documents PDF volumineux.
Comment puis-je activer le multithreading pour le traitement des codes-barres ?
Pour activer le multithreading dans IronBarcode, définissez la propriété Multithreaded sur 'true' dans les BarcodeReaderOptions. Vous pouvez également contrôler le nombre de threads parallèles en utilisant la propriété MaxParallelThreads, ce qui vous permet d'optimiser les performances en fonction des capacités de votre système.
Puis-je combiner l'asynchronisme et le multithreading pour des performances optimales ?
Oui, IronBarcode vous permet de combiner les deux approches. Vous pouvez utiliser ReadAsync() avec le multithreading activé en réglant Multithreaded = true et en configurant MaxParallelThreads dans BarcodeReaderOptions. Cette combinaison permet d'obtenir des opérations d'E/S non bloquantes et un traitement parallèle sur plusieurs cœurs de CPU.
Quand dois-je utiliser async vs multithreading pour la lecture de codes-barres ?
Utilisez des opérations asynchrones dans IronBarcode lorsque vous traitez des tâches liées aux E/S, comme la lecture de fichiers volumineux ou les requêtes réseau, car cela permet d'éviter le gel de l'interface utilisateur. Utilisez le multithreading lorsque vous devez traiter plusieurs codes-barres simultanément et que vous disposez de ressources CPU. Pour de meilleurs résultats, combinez les deux approches lorsque vous traitez plusieurs images de codes-barres ou PDF de grande taille.

