Wie man Async und Multithread in Barcode mit C# verwendet

Wie man Async und Multithread in C#35; mit IronBarcode verwendet

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

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: Asynchrones & Multithreaded Barcode Reading 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.

Nuget IconLegen Sie jetzt mit NuGet los, um PDFs zu erstellen:

  1. Installieren Sie IronBarcode mit dem NuGet-Paketmanager.

    PM > Install-Package BarCode

  2. 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 });
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute mit der Nutzung von IronBarcode in Ihrem Projekt – mit einer kostenlosen Testversion.
    arrow pointer


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 mit 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 für Bilder bzw. PDF-Dokumente 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
$vbLabelText   $csharpLabel

Der obige Codeschnipsel instanziiert eine Liste 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 Operationsmethode ist auch für das Lesen von Barcodes in PDF-Dokumenten über ReadPdfAsync in derselben Klasse verfügbar. Spezifische Konfigurationen für das Lesen von PDF-Dateien finden Sie in unserem Einstellungshandbuch für PDF-Barcode-Leser.

Wann sollte ich asynchrones Lesen gegenüber regulären Methoden verwenden?

Asynchrones Lesen ist in mehreren Szenarien von Vorteil:

  1. GUI-Anwendungen: Windows Forms- oder WPF-Anwendungen, die eine reaktionsfähige Benutzeroberfläche erfordern. Async verhindert das Einfrieren der Schnittstelle beim Scannen von Barcodes.

  2. Webanwendungen: ASP.NET-Anwendungen, die mehrere gleichzeitige Anfragen ohne blockierende Threads verarbeiten, insbesondere bei der Verarbeitung hochgeladener Barcode-Bilder.

  3. Stapelverarbeitung: Sequentielles Lesen mehrerer BarCode-Bilder oder PDFs, wobei andere Aufgaben während der E/A-Operationen ausgeführt werden können.

  4. 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:

  1. Stopps: Vermeiden Sie Result oder Wait() bei asynchronen Methoden in UI-Kontexten. Verwenden Sie immer await in der gesamten Aufrufkette.

  2. Ausnahmebehandlung: Wickeln Sie async-Aufrufe in try-catch-Blöcke ein, da sich Ausnahmen in async-Methoden möglicherweise nicht wie erwartet ausbreiten.

  3. Kontext-Wechsel: Erwägen Sie die Verwendung von ConfigureAwait(false), wenn Sie nicht zum ursprünglichen Synchronisationskontext zurückkehren müssen.

  4. 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 das Multithreading, indem Sie die Eigenschaft Multithreaded setzen und die maximale Anzahl der Kerne für die gleichzeitige Ausführung mit MaxParallelThreads in BarcodeReaderOptions angeben. Der Standardwert MaxParallelThreads ist 4 und kann je nach verfügbaren CPU-Kernen angepasst werden. Für optimale Leistungskonfigurationen siehe unseren Lesegeschwindigkeits-Optionen-Leitfaden.

Hinweis:Um verfügbare Kerne zu finden: Task-Manager -> Registerkarte Leistung -> Klicken Sie auf CPU. das Feld 'Cores' zeigt die Anzahl an

: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
$vbLabelText   $csharpLabel

Wie viel Leistungsverbesserung kann ich erwarten?

Lesen wir zwei Beispielbilder und vergleichen wir die Lesezeiten bei normalen, asynchronen und Multithreading-Operationen.

Beispielfoto

UPC-A BarCode Beispiel mit der Nummer 0 123456 789012 für Multithread BarCode Lesedemonstration
UPC-A-Barcode-Beispiel mit Nummer 771234567003 für Multithread-Barcode-Lesevorführung
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:

  1. CPU-gebundene Operationen: Die Verarbeitung umfasst schwere Berechnungen wie komplexe Bildfilter oder hochauflösende Bilder
  2. Stapelverarbeitung: Mehrere unabhängige Bilder erfordern eine gleichzeitige Verarbeitung
  3. Multi-Core-Systeme: Die Einsatzumgebung hat mehrere CPU-Kerne zur Verfügung
  4. Leistungskritisch: Rohe Verarbeitungsgeschwindigkeit überwiegt gegenüber der Ressourceneffizienz

Wählen Sie asynchrone Operationen, wenn:

  1. I/O-gebundene Operationen: Die meiste Zeit wird mit dem Lesen von Dateien oder dem Warten auf Netzwerkantworten verbracht
  2. UI-Anwendungen: Responsive Benutzeroberflächen sind entscheidend
  3. Beschränkte Ressourcen: Ausführung auf Systemen mit begrenzten CPU-Kernen
  4. Webanwendungen: Effiziente Bearbeitung mehrerer gleichzeitiger Anfragen

Wie ermittle ich den optimalen MaxParallelThreads-Wert?

Der optimale MaxParallelThreads-Wert hängt von mehreren Faktoren ab:

  1. Verfügbare CPU-Kerne: Beginnen Sie mit Environment.ProcessorCount als Basiswert
  2. Arbeitslasttyp: Für reines BarCode-Lesen, 75% der verfügbaren Kerne verwenden
  3. Systemressourcen: Lassen Sie Spielraum für Betriebssysteme und andere Prozesse
  4. Testergebnisse: Benchmarking 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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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.

Hairil Hasyimi Bin Omar
Software Ingenieur
Wie alle großen Ingenieure ist Hairil ein leidenschaftlicher Lerner. Er verfeinert sein Wissen in C#, Python und Java, um Iron Software-Teammitgliedern Mehrwert zu bieten. Hairil kam von der Universiti Teknologi MARA in Malaysia, wo er seinen Bachelor in Chemie- und Verfahrenstechnik abschloss.
Bereit anzufangen?
Nuget Downloads 2,002,059 | Version: 2025.12 gerade veröffentlicht