Verwendung von Async und Multithread
Die Begriffe Async und Multithreading-Operationen werden oft verwechselt. Beide Methoden zielen darauf ab, die Programmleistung und -effizienz zu verbessern, indem die Nutzung der Systemressourcen optimiert und die Laufzeit verkürzt wird. Sie unterscheiden sich jedoch in ihrem Ansatz, ihren Mechanismen und den beabsichtigten Anwendungsfällen. IronBarcode unterstützt beide Ansätze. In diesem Artikel werden die Unterschiede zwischen ihnen und ihre Implementierung mit IronBarcode erläutert.
Verwendung von Async und Multithread
- >Download the C# library for async and multithread support
- Verwenden Sie die Methoden
ReadAsync
undReadPdfAsync
für das asynchrone Lesen von Barcodes aus Bildern und PDFs - Aktivieren Sie Multithreading, indem Sie die Multithreaded-Eigenschaft auf 'true' setzen
- Specify parallel thread count using the MaxParallelThreads property
- Vergleichen Sie die Leistung beim normalen, asynchronen und multithreaded Barcode-Lesen
Erste Schritte mit IronBarcode
Beginnen Sie noch heute mit der Verwendung von IronBarcode in Ihrem Projekt mit einer kostenlosen Testversion.
Barcodes asynchron lesen Beispiel
Zunächst sollten wir verstehen, was asynchrones Lesen ist und welche Vorteile es für die Nutzer hat. Asynchrones Lesen ermöglicht lange oder blockierende Operationen, ohne die Ausführung des Hauptthreads zu blockieren. In C# können Benutzer die async und await Schlüsselwörter mit Methoden nutzen, die asynchrone Funktionen unterstützen. Dadurch werden keine weiteren Threads erstellt, sondern der aktuelle Thread wird freigegeben. Der Haupt-Thread ist zwar immer noch notwendig, um Aufgaben zu initiieren und zu verwalten, aber er muss nicht ausschließlich einer einzigen Aufgabe gewidmet sein. Der Hauptthread wird aufgerufen, wenn die asynchrone Methode seine Beteiligung erfordert, so dass er andere Aufgaben erledigen kann, wenn er nicht benötigt wird, z. B. E/A-gebundene Aufgaben wie das Lesen/Schreiben von Dateien oder Netzwerkanforderungen.
Nehmen wir das Lesen von Strichcodes als Beispiel. In diesem Szenario wären die folgenden Schritte erforderlich:
- Lesen der Datei
- Anwendung der Leseoptionen
Dekodierung des Barcodes
Während des Schritts "Lesen der Datei" kann die Hauptaufgabe freigegeben werden.
Verwenden Sie die Methoden
ReadAsync
undReadPdfAsync
, um Barcodes asynchron für Bilder bzw. PDF-Dokumente zu lesen.
: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
In dem obigen Codeausschnitt haben wir eine Liste von Bildpfaden instanziiert, die von IronBarcode asynchron gelesen werden sollen. Um die Bilder zu lesen, können Sie die Methode ReadAsync
aus der Klasse BarcodeReader verwenden. Die Benutzer können dann die Bildpfade und die Leseoptionen angeben.
Diese Methode für asynchrone Operationen ist auch verfügbar, um Barcodes in PDF-Dokumenten zu lesen, bekannt als ReadPdfAsync
, die Teil derselben Klasse ist.
Lesen von Barcodes in Multithread-Beispielen
Im Unterschied zu asynchronen Operationen ermöglicht Multithreading die gleichzeitige Ausführung eines einzelnen Prozesses in mehreren Threads. Das bedeutet, dass ein Prozess nicht sequentiell in einem einzigen Thread ausgeführt wird, sondern dass die Aufgaben auf mehrere Threads verteilt werden, was eine gleichzeitige Ausführung ermöglicht. Damit Multithreading funktioniert, muss ein Rechner jedoch über mehrere CPU-Kerne verfügen, da diese Kerne zur unabhängigen Ausführung der Threads verwendet werden. Ähnlich wie bei asynchronen Operationen zielt das Multithreading darauf ab, die Leistung und Reaktionsfähigkeit von Anwendungen zu verbessern.
In IronBarcode aktivieren Sie Multithreading, indem Sie die Multithreaded-Eigenschaft setzen und die maximale Anzahl an Kernen für die parallele Ausführung mit MaxParallelThreads in BarcodeReaderOptions festlegen. Der Standardwert für MaxParallelThreads ist 4, was basierend auf den verfügbaren CPU-Kernen angepasst werden kann.
Bitte beachten Sie
: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
Leistungsvergleich
Lesen wir nun die beiden Bilder unten und vergleichen die Lesezeit von normalen, asynchronen und Multithread-Operationen.
Beispielbild


Normal Read | Asynchronous Read | Multithreaded Read (4 cores) |
---|---|---|
01.75 second | 01.67 second | 01.17 second |
Aus der Vergleichstabelle ist ersichtlich, dass die Leistung deutlich zunimmt, wenn asynchrones und multithreaded Lesen implementiert ist. Diese beiden Vorgänge dienen jedoch unterschiedlichen Zwecken und Ansätzen. Daher müssen die Benutzer entscheiden, welcher Ansatz für die von ihnen zu erstellende Anwendung besser geeignet ist.
Schließlich kann es Situationen geben, in denen mehrere Strichcodes auf einem einzigen Dokument vorhanden sind. Für weitere Informationen besuchen Sie den Leitfaden zum Lesen mehrerer Barcodes.