Verwendung von Async und Multithread
Die Begriffe Asynchron 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 der C#-Bibliothek für asynchrone und Multithread-Unterstützung
- Verwenden Sie
ReadAsync
undReadPdfAsync
methoden zum asynchronen Lesen von Barcodes aus Bildern und PDFs - Aktivieren Sie Multithreading mit der Option Multithreading eigenschaft auf 'true' gesetzt
- Geben Sie die Anzahl der parallelen Fäden mit der Option MaxParallelThreads eigenschaft
- Prüfen Sie den Leistungsvergleich zwischen normalem, asynchronem und Multithreading-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 Schlüsselwörter async und await mit Methoden verwenden, 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" der Klasse BarcodeReader verwenden. Die Benutzer können dann die Bildpfade und die Leseoptionen angeben.
Diese Methode für asynchrone Operationen steht auch für das Lesen von Barcodes in PDF-Dokumenten zur Verfügung, bekannt als ReadPdfAsync
, die Teil der gleichen 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.
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 für MaxParallelThreads ist 4, der je nach 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 lesen | Asynchrones Lesen | Multithreading-Lesen (4 Kerne) |
---|---|---|
1.75 Sekunden | 1.67 Sekunde | 1.17 Sekunde |
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. Weitere Informationen erhalten Sie auf derMehrere Barcodes lesen leitfaden.