Wie man Async und Multithread in C# mit IronBarcode verwendet
Async und Multithreading in IronBarcode optimieren die Leistung beim Lesen von Barcodes auf unterschiedliche Weise - Async verhindert das Blockieren des Haupt-Threads bei E/A-Operationen, während Multithreading mehrere Barcodes gleichzeitig auf mehreren CPU-Kernen verarbeitet.
Entwickler verwechseln häufig die Operationen Async und Multithreading. Beide Methoden verbessern die Leistung und Effizienz von Programmen, indem sie die Nutzung von Systemressourcen optimieren und die Laufzeit verkürzen. Sie unterscheiden sich jedoch in ihrem Ansatz, ihren Mechanismen und ihren Anwendungsfällen. IronBarcode unterstützt beide Ansätze. Dieser Artikel befasst sich mit den Unterschieden und der Implementierung mit IronBarcode.
Schnellstart: Async & Multithreaded Barcode-Lese-Beispiel
Verwenden Sie dieses Einzeilenbeispiel, um sofort mit IronBarcode zu beginnen. Es zeigt, wie einfach es ist, asynchrones Lesen und Multithreading-Optionen zu kombinieren, um mehrere Barcode-Bilder parallel mit minimalem Setup zu scannen.
-
Installieren Sie IronBarcode mit NuGet Package Manager
PM > Install-Package BarCode -
Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.
var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true }); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronBarcode in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (5 Schritte)
- Herunterladen der C#-Bibliothek für Async- und Multithread-Unterstützung
- Verwenden Sie die Methoden
ReadAsyncundReadPdfAsynczum asynchronen Lesen von Barcodes aus Bildern und PDFs - Aktivieren Sie Multithreading mit der Multithreaded Eigenschaft auf 'true' gesetzt
- Angeben der Anzahl paralleler Threads mit der Eigenschaft MaxParallelThreads
- Überprüfen Sie den Leistungsvergleich zwischen normalem, asynchronem und multithreaded Barcode-Lesen
Wie lese ich Barcodes asynchron mit IronBarcode?
Asynchrones Lesen ermöglicht es, dass lange oder blockierende Operationen fortgesetzt werden, ohne die Ausführung des Hauptthreads zu blockieren. Verwenden Sie in C# die Schlüsselwörter async und await bei Methoden, die asynchrone Funktionen unterstützen. Bei diesem Ansatz werden keine zusätzlichen Threads erstellt, sondern der aktuelle Thread wird freigegeben. Während der Hauptstrang Aufgaben initiiert und verwaltet, bleibt er nicht ausschließlich einer einzigen Aufgabe gewidmet. Der Haupt-Thread kehrt zurück, wenn die asynchrone Methode seine Beteiligung erfordert, so dass er sich um andere Aufgaben kümmern kann, wenn er nicht benötigt wird - besonders nützlich für E/A-gebundene Aufgaben wie das Lesen/Schreiben von Dateien oder das Stellen von Netzwerkanforderungen.
Nehmen wir das Lesen von Barcodes als Beispiel. Der Prozess beinhaltet:
- Die Datei lesen
- Leseoptionen anwenden
- Den Barcode dekodieren
Während des Lesens der Datei kann die Hauptaufgabe freigegeben werden. Dies kommt Szenarien mit mehreren Bilddateien oder großen PDFs zugute, wie in unserem Tutorial zum Lesen von Barcodes gezeigt.
Verwenden Sie die Methoden ReadAsync und ReadPdfAsync, um BarCodes asynchron aus Bildern bzw. PDF-Dokumenten zu lesen. Bevor Sie asynchrone Operationen implementieren, stellen Sie sicher, dass Sie IronBarcode über NuGet in Ihrem Projekt installiert haben.
: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
Der obige Codeausschnitt instanziiert ein List von Bildpfaden, die von IronBarcode asynchron gelesen werden sollen. Um die Bilder zu lesen, verwenden Sie die Methode ReadAsync aus der Klasse BarcodeReader. Geben Sie die imagePaths und die Leseoptionen an. Erweiterte Konfigurationsoptionen finden Sie in unserem Leitfaden zu Barcode-Leser-Einstellungen.
Diese asynchrone Betriebsmethode steht auch für das Lesen von BarCodes in PDF-Dokumenten über ReadPdfAsync in derselben Klasse zur Verfügung. Spezifische Konfigurationen für das Lesen von PDF-Dateien finden Sie in unserem Einstellungshandbuch für PDF-Barcode-Leser.
Multithreaded
MaxParallelThreads
Wann sollte ich asynchrones Lesen gegenüber regulären Methoden verwenden?
Asynchrones Lesen ist in mehreren Szenarien von Vorteil:
-
GUI-Anwendungen: Windows Forms- oder WPF-Anwendungen, die eine reaktionsfähige Benutzeroberfläche erfordern. Async verhindert das Einfrieren der Schnittstelle beim Scannen von Barcodes.
-
Webanwendungen: ASP.NET-Anwendungen, die mehrere gleichzeitige Anfragen ohne blockierende Threads verarbeiten, insbesondere bei der Verarbeitung hochgeladener Barcode-Bilder.
-
Stapelverarbeitung: Sequentielles Lesen mehrerer BarCode-Bilder oder PDFs, wobei andere Aufgaben während der E/A-Operationen ausgeführt werden können.
- Netzbetrieb: Lesen von BarCodes aus entfernten Quellen oder URLs, wie in unserem Beispiel für das asynchrone Lesen von BarCodes aus einer URL gezeigt.
Warum verbessert Async Reading die Reaktionsfähigkeit von Anwendungen?
Asynchrones Lesen verbessert die Reaktionsfähigkeit, indem der Haupt-Thread während E/A-gebundener Operationen freigegeben wird. Wenn IronBarcode eine Bilddatei von der Festplatte liest oder eine PDF-Datei verarbeitet, wartet der Thread nicht im Leerlauf. Stattdessen übernimmt sie andere Aufgaben wie die Beantwortung von Benutzereingaben oder die Bearbeitung von Anfragen. Dies ist besonders wichtig, wenn es um Folgendes geht:
- Große Bilddateien, die viel Zeit zum Laden benötigen
- PDFs mit mehreren Seiten, die BarCodes enthalten
- Netzwerkbasierte Bildquellen
- Szenarien, die Bildkorrekturfilter vor der Barcode-Erkennung erfordern
Was sind häufige Fallstricke bei der Verwendung von Async BarCode Reading?
Achten Sie bei der Implementierung von asynchronem Barcodelesen auf diese häufigen Probleme:
-
Deadlocks: Vermeiden Sie
ResultoderWait()bei asynchronen Methoden in UI-Kontexten. Verwenden Sie in der gesamten Aufrufkette stetsawait. -
Ausnahmebehandlung: Wickeln Sie async-Aufrufe in try-catch-Blöcke ein, da sich Ausnahmen in async-Methoden möglicherweise nicht wie erwartet ausbreiten.
-
Kontextwechsel: Ziehen Sie die Verwendung von
ConfigureAwait(false)in Betracht, wenn Sie nicht zum ursprünglichen Synchronisationskontext zurückkehren müssen. - Leistungsmißverständnisse: Async beschleunigt keine einzelnen Operationen; sie verbessert die Reaktionsfähigkeit von Anwendungen. Um die Geschwindigkeit bei mehreren Bildern zu erhöhen, sollten Sie Multithreading in Betracht ziehen.
Für die Fehlerbehebung bei asynchronen Problemen lesen Sie bitte unseren Leitfaden zur Fehlerbehebung bei der Barcode-Erkennung.
Wie aktiviere ich das Lesen von BarCodes im Multithreading-Verfahren?
Im Gegensatz zu asynchronen Operationen wird beim Multithreading ein einzelner Prozess über mehrere Threads gleichzeitig ausgeführt. Anstelle der sequenziellen Ausführung in einem einzigen Thread werden beim Multithreading Aufgaben auf mehrere Threads aufgeteilt, um sie gleichzeitig auszuführen. Multithreading erfordert mehrere CPU-Kerne, da diese Kerne unabhängig voneinander Threads ausführen. Wie asynchrone Operationen erhöht auch Multithreading die Leistung und Reaktionsfähigkeit von Anwendungen.
Aktivieren Sie in IronBarcode Multithreading, indem Sie die Eigenschaft Multithreaded setzen und die maximale Anzahl an Kernen für die parallele Ausführung mithilfe von MaxParallelThreads in BarcodeReaderOptions festlegen. Der Standardwert von MaxParallelThreads ist 4 und kann je nach verfügbaren CPU-Kernen angepasst werden. Für optimale Leistungskonfigurationen siehe unseren Lesegeschwindigkeits-Optionen-Leitfaden.
: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
Wie viel Leistungsverbesserung kann ich erwarten?
Lesen wir zwei Beispielbilder und vergleichen wir die Lesezeiten bei normalen, asynchronen und Multithreading-Operationen.
Beispielfoto
| Normal lesen | Asynchrones Lesen | Multithreading-Lesen (4 Kerne) |
|---|---|---|
| 01.75 Sekunden | 01.67 Sekunden | 01.17 Sekunden |
Der Vergleich zeigt signifikante Leistungssteigerungen beim asynchronen und multithreadingbasierten Lesen. Multithreading bietet eine Verbesserung von ca. 33 % gegenüber dem normalen Lesen, während async eine Verbesserung von ca. 5 % bietet. Diese Vorgänge dienen jedoch unterschiedlichen Zwecken und Ansätzen. Wählen Sie den Ansatz, der am besten zu den Anforderungen Ihrer Anwendung passt.
Die Leistungsverbesserungen sind abhängig von:
- Anzahl der bearbeiteten Bilder
- Bildkomplexität und BarCode-Qualität
- Verfügbare CPU-Kerne
- Andere Systemressourcen
Für Situationen mit mehreren BarCodes auf einem einzigen Dokument, besuchen Sie den Lesen mehrerer BarCodes Leitfaden.
Wann sollte ich Multithreading den asynchronen Operationen vorziehen?
Wählen Sie Multithreading, wenn:
- CPU-intensive Operationen: Die Verarbeitung erfordert intensive Berechnungen wie komplexe Bildfilter oder hochauflösende Bilder
- Batch-Verarbeitung: Mehrere unabhängige Bilder erfordern gleichzeitige Verarbeitung
- Mehrkernsyste: Die Bereitstellungsumgebung verfügt über mehrere verfügbare CPU-Kerne
- Leistungskritisch: Rohe Verarbeitungsgeschwindigkeit übertrifft Ressourceneffizienz
Wählen Sie asynchrone Operationen, wenn:
- I/O-intensive Operationen: Die meiste Zeit wird mit dem Lesen von Dateien oder Warten auf Netzwerkantworten verbracht
- UI-Anwendungen: Aufrechterhaltung reaktionsfähiger Benutzeroberflächen ist entscheidend
- Begrenzte Ressourcen: Ausführung auf Systemen mit begrenzten CPU-Kernen
- Webanwendungen: Effiziente Bearbeitung mehrerer gleichzeitiger Anfragen
Wie ermittle ich den optimalen MaxParallelThreads-Wert?
Der optimale Wert für MaxParallelThreads hängt von mehreren Faktoren ab:
- Verfügbare CPU-Kerne: Beginnen Sie mit `` als Ausgangswert
- Arbeitslasttyp: Für reines Barcode-Lesen verwenden Sie 75% der verfügbaren Kerne
- Systemressourcen: Lassen Sie Spielraum für das Betriebssystem und andere Prozesse
- Testergebnisse: Benchmarken Sie mit Ihrer spezifischen Arbeitslast
Hier ist ein praktischer Ansatz, um den optimalen Wert zu finden:
int optimalThreads = Math.Max(1, Environment.ProcessorCount - 1);
int optimalThreads = Math.Max(1, Environment.ProcessorCount - 1);
In Produktionsumgebungen sollten Sie die Leistung überwachen und auf der Grundlage der tatsächlichen Nutzungsmuster anpassen. Erwägen Sie die Implementierung einer Lizenzschlüsselkonfiguration für Unternehmenseinsätze, die maximale Leistung erfordern.
Die vollständigen API-Funktionen finden Sie in der IronBarcode API-Referenz.
Häufig gestellte Fragen
Was ist der Unterschied zwischen asynchronem und Multithreading beim Lesen von Barcodes?
Mit IronBarcode verhindern asynchrone Operationen das Blockieren des Hauptthreads bei E/A-Aufgaben wie dem Lesen von Dateien, während Multithreading mehrere Barcodes gleichzeitig auf mehreren CPU-Kernen verarbeitet. Async verwendet die async/await-Schlüsselwörter, um den Haupt-Thread bei langen Operationen freizugeben, während Multithreading mehrere Threads zur parallelen Verarbeitung von Barcodes erstellt.
Wie implementiere ich asynchrones Barcode-Lesen in C#?
IronBarcode bietet die Methoden ReadAsync() und ReadPdfAsync() für asynchrones Lesen von Barcodes. Verwenden Sie diese Methoden einfach mit den async/await-Schlüsselwörtern in C#, um Barcodes aus Bildern und PDFs zu lesen, ohne den Hauptthread zu blockieren. Dies ist besonders vorteilhaft bei der Verarbeitung mehrerer Bilddateien oder großer PDF-Dokumente.
Wie kann ich Multithreading für die Barcode-Verarbeitung aktivieren?
Um Multithreading in IronBarcode zu aktivieren, setzen Sie die Eigenschaft Multithreaded in den BarcodeReaderOptions auf 'true'. Sie können auch die Anzahl der parallelen Threads mit der Eigenschaft MaxParallelThreads steuern, so dass Sie die Leistung auf der Grundlage der Fähigkeiten Ihres Systems optimieren können.
Kann ich Asynchronität und Multithreading für eine optimale Leistung kombinieren?
Ja, IronBarcode ermöglicht es Ihnen, beide Ansätze zu kombinieren. Sie können ReadAsync() mit aktiviertem Multithreading verwenden, indem Sie Multithreaded = true setzen und MaxParallelThreads in den BarcodeReaderOptions konfigurieren. Diese Kombination bietet sowohl nicht-blockierende E/A-Operationen als auch parallele Verarbeitung über mehrere CPU-Kerne.
Wann sollte ich async vs. multithreading für das Lesen von Barcodes verwenden?
Verwenden Sie asynchrone Operationen in IronBarcode, wenn Sie mit I/O-gebundenen Aufgaben wie dem Lesen großer Dateien oder Netzwerkanfragen zu tun haben, da dies ein Einfrieren der Benutzeroberfläche verhindert. Verwenden Sie Multithreading, wenn Sie mehrere Barcodes gleichzeitig verarbeiten müssen und CPU-Ressourcen zur Verfügung haben. Die besten Ergebnisse erzielen Sie, wenn Sie beide Ansätze kombinieren, wenn Sie mehrere große Barcode-Bilder oder PDFs verarbeiten.
Welche Vorteile bietet die Verwendung von IronBarcode für Barcode-Operationen?
IronBarcode bietet Vorteile wie einfache Integration, Unterstützung für zahlreiche Barcode-Formate, hochqualitative Bilderstellung und robuste Lesefähigkeiten, was es zu einem umfassenden Tool für Barcode-Operationen in C# macht.
Bietet IronBarcode Unterstützung für die Anpassung des Barcode-Aussehens?
Ja, IronBarcode bietet umfangreiche Anpassungsoptionen für das Barcode-Aussehen, einschließlich Farbe, Größe und Textanmerkungen, sodass Sie Barcodes an Ihre spezifischen Designanforderungen anpassen können.
Wie kann IronBarcode zur Verbesserung der Effizienz von Geschäftsprozessen beitragen?
IronBarcode erhöht die Effizienz von Geschäftsprozessen, indem es eine schnelle und genaue Barcode-Erzeugung und -Lesen ermöglicht, manuelle Dateneingabefehler reduziert und die Verfolgung von Beständen und Vermögensgegenständen verbessert.
Welche Programmierkenntnisse sind erforderlich, um IronBarcode in einem Projekt zu implementieren?
Grundkenntnisse in C#-Programmierung reichen aus, um IronBarcode in einem Projekt zu implementieren, da es unkomplizierte Methoden und eine umfassende Dokumentation für Entwickler bietet.
Ist IronBarcode sowohl für kleine Projekte als auch für große Unternehmensanwendungen geeignet?
IronBarcode ist so konzipiert, dass es skalierbar und vielseitig ist, wodurch es sich sowohl für kleine Projekte als auch für große Unternehmensanwendungen eignet, die robuste Barcode-Lösungen benötigen.

