Maximale parallele Threads einstellen
Beim Lesen großer Mengen von Barcodes kann die Verwendung eines Single-Thread-Prozesses zu Leistungsengpässen führen und die Skalierbarkeit einschränken. Durch die Verwendung paralleler Threads kann Ihre Anwendung jedoch mehrere Bilder gleichzeitig verarbeiten, wodurch sich die Gesamtverarbeitungsleistung effektiv vervielfacht und die Zeit, die für die Ausführung eines Stapelauftrags benötigt wird, drastisch verkürzt.
Die Festlegung einer Höchstgrenze für diese Threads ist ein wirksames Mittel zur Leistungsoptimierung. Sie stellt sicher, dass die Anwendung das volle Potenzial der Hardware ausschöpft, indem sie die Arbeitslast auf die Prozessorkerne verteilt. Dieser Ansatz maximiert die Effizienz und sorgt dafür, dass die Anwendung reibungslos läuft, während gleichzeitig die schnellstmöglichen Ergebnisse erzielt werden.
IronBarcode bietet eine einfache Möglichkeit, diese Grenze zu kontrollieren und so eine optimale Maschinenleistung zu gewährleisten. Im folgenden Abschnitt wird gezeigt, wie Sie diese Thread-Grenzen einfach festlegen können.
Einstellen der maximalen Anzahl paralleler Threads in C#
- Laden Sie die IronBarcode C# Bibliothek herunter, um die maximale Anzahl paralleler Threads zum Lesen von Barcodes festzulegen
- Laden Sie die BarCodes aus einem bestimmten Ordner
- Instanziieren Sie ein neues `BarcodeReaderOptions` Objekt
- Setzen Sie ` Multithreaded ` auf true und geben Sie eine ganze Zahl für ` MaxParallelThreads ` an
- Drucken und Anzeigen der Ergebnisse mit `BarcodeResults`
Max. parallele Threads einstellen
In diesem Beispiel werden wir einen großen Satz von Barcode-Bildern verwenden, um die Skalierbarkeit und Effizienz der Verwendung eines Multi-Thread-Prozesses anstelle eines Single-Thread-Prozesses zu veranschaulichen. Sie können den Bildordner hier herunterladen.
Um IronBarcode so zu konfigurieren, dass es mehr als einen Thread verwendet, wird zunächst ein neues BarcodeReaderOptions-Objekt instanziiert, bei dem Multithreaded auf true gesetzt ist. Anschließend wird die Eigenschaft MaxParallelThreads durch Zuweisung eines ganzzahligen Wertes festgelegt. Standardmäßig ist MaxParallelThreads auf 4 eingestellt.
Nach dem Konfigurieren der Einstellungen wird eine große Anzahl von Barcode-Bildern aus dem Ordner importiert. Anschließend wird mithilfe einer Schleife das Barcode-Bildverzeichnis mit der Methode Read gelesen, wobei der Dateipfad und das konfigurierte BarcodeReaderOptions übergeben werden. Schließlich werden der Barcode-Wert und der Typ durch Zugriff auf BarcodeResults angezeigt.
:path=/static-assets/barcode/content-code-examples/how-to/set-max-parallel-thread.cs
using Google.Protobuf.WellKnownTypes;
using IronBarCode;
using System;
using System.IO;
int maxParallelThreads = 4;
var optionsFaster = new BarcodeReaderOptions
{
// Set Max threads to 4
Multithreaded = true,
MaxParallelThreads = maxParallelThreads,
};
// Dynamically get the "images" folder in the current directory
string folderPath = Path.Combine(Directory.GetCurrentDirectory(), "images");
// Retrieve all JPG files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");
foreach (var file in pdfFiles)
{
// Read the barcode
var results = BarcodeReader.Read(file);
foreach (var result in results)
{
// Show the type and value for every barcode found
Console.WriteLine($"Value: {result.Value}, Type: {result.BarcodeType}");
}
}
Imports Google.Protobuf.WellKnownTypes
Imports IronBarCode
Imports System
Imports System.IO
Dim maxParallelThreads As Integer = 4
Dim optionsFaster As New BarcodeReaderOptions With {
.Multithreaded = True,
.MaxParallelThreads = maxParallelThreads
}
' Dynamically get the "images" folder in the current directory
Dim folderPath As String = Path.Combine(Directory.GetCurrentDirectory(), "images")
' Retrieve all JPG files in the directory
Dim pdfFiles = Directory.GetFiles(folderPath, "*.jpg")
For Each file In pdfFiles
' Read the barcode
Dim results = BarcodeReader.Read(file)
For Each result In results
' Show the type and value for every barcode found
Console.WriteLine($"Value: {result.Value}, Type: {result.BarcodeType}")
Next
Next
Ausgabe
Wie in der Konsolenausgabe zu sehen ist, werden der Barcodewert und -typ für jedes entsprechende Bild angezeigt.
Einstellung des geeigneten maximalen parallelen Threads
Wenn die Eigenschaft Multithreaded auf "true" gesetzt ist, hat die Eigenschaft MaxParallelThreads standardmäßig den Wert 4. Obwohl es keine feste Obergrenze für den der Eigenschaft MaxParallelThreads zugewiesenen Integer-Wert gibt, kann die Einstellung eines höheren Wertes als die logische Kernkapazität Ihrer Hardware tatsächlich zu einer Leistungsminderung führen. Der Grund dafür ist, dass der Prozessor nicht mit übermäßigen Kontextwechseln umgehen kann, was möglicherweise eher zu Overhead als zu Geschwindigkeit führt. Daher hängt der korrekte Wert für MaxParallelThreads von den Spezifikationen des Computers ab, und Entwickler sollten Tests durchführen, um den optimalen Wert für ihre Umgebung zu finden.
In diesem Beispiel werden wir das gleiche Multithread-Szenario wie oben demonstrieren, jedoch mit einem Timer, um den Standardwert von 4 mit der Verwendung von Environment.ProcessorCount zur Nutzung aller verfügbaren Threads zu vergleichen. In unserem Fall verwenden wir einen Computer mit 32 logischen Prozessoren, daher wird MaxParallelThreads auf 32 gesetzt.
:path=/static-assets/barcode/content-code-examples/how-to/set-max-parallel-thread-performance.cs
using IronBarCode;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
// Set the max parallel threads to the number of processor cores
int maxParallelThreads = Environment.ProcessorCount;
var optionsFaster = new BarcodeReaderOptions
{
// Set Max threads to the number of processor cores
Multithreaded = true,
MaxParallelThreads = maxParallelThreads,
ExpectMultipleBarcodes = true,
};
// Start timing the process
var stopwatch = Stopwatch.StartNew();
// Dynamically get the "images" folder in the current directory
string folderPath = Path.Combine(Directory.GetCurrentDirectory(), "images");
// Check if directory exists to prevent crashes
if (!Directory.Exists(folderPath))
{
Console.WriteLine($"Error: The directory '{folderPath}' does not exist.");
return;
}
// Get all JPG files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");
foreach (var file in pdfFiles)
{
// Read the barcode
var results = BarcodeReader.Read(file);
if (results.Any())
{
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}");
foreach (var result in results)
{
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}");
}
}
}
stopwatch.Stop();
// Print number of images the barcode reader could decode
Console.WriteLine($" Max parallel threads of {maxParallelThreads} with {stopwatch.Elapsed.TotalSeconds:F2}s");
Imports IronBarCode
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Linq
' Set the max parallel threads to the number of processor cores
Dim maxParallelThreads As Integer = Environment.ProcessorCount
Dim optionsFaster As New BarcodeReaderOptions With {
.Multithreaded = True,
.MaxParallelThreads = maxParallelThreads,
.ExpectMultipleBarcodes = True
}
' Start timing the process
Dim stopwatch As Stopwatch = Stopwatch.StartNew()
' Dynamically get the "images" folder in the current directory
Dim folderPath As String = Path.Combine(Directory.GetCurrentDirectory(), "images")
' Check if directory exists to prevent crashes
If Not Directory.Exists(folderPath) Then
Console.WriteLine($"Error: The directory '{folderPath}' does not exist.")
Return
End If
' Get all JPG files in the directory
Dim pdfFiles As String() = Directory.GetFiles(folderPath, "*.jpg")
For Each file As String In pdfFiles
' Read the barcode
Dim results = BarcodeReader.Read(file)
If results.Any() Then
Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}")
For Each result In results
Console.WriteLine($" Value: {result.Value}, Type: {result.BarcodeType}")
Next
End If
Next
stopwatch.Stop()
' Print number of images the barcode reader could decode
Console.WriteLine($" Max parallel threads of {maxParallelThreads} with {stopwatch.Elapsed.TotalSeconds:F2}s")
Ausgabe
Bearbeitungszeit mit 4 Threads
Die Bearbeitungszeit für diesen Prozess beträgt 84 Sekunden.
Bearbeitungszeit mit Environment ProcessorCount
Wie Sie sehen können, beträgt die Verarbeitungszeit für diesen Vorgang 53 Sekunden, was deutlich schneller ist als die Ausführung mit nur vier Threads. Bitte beachten Sie jedoch, dass die Verwendung von mehr Threads keine Garantie für eine bessere Leistung ist, da diese vom Host-Prozessor abhängt. Als Faustregel gilt, dass die maximale Anzahl der verfügbaren Prozessoren minus einen verwendet werden sollte, um sicherzustellen, dass noch ein einzelner Thread für andere Systemoperationen zur Verfügung steht.
Multithreaded auf true und das Erhöhen von MaxParallelThreads die Prozessgeschwindigkeit nicht verbessern, sondern sie möglicherweise sogar verringern.Häufig gestellte Fragen
Welchen Zweck erfüllt die Einstellung der maximalen Anzahl paralleler Threads in IronBarcode?
Die Einstellung der maximalen Anzahl paralleler Threads ermöglicht es Ihnen, die Leistung der Barcode-Generierung durch effiziente Nutzung der Systemressourcen zu optimieren, insbesondere bei der Verarbeitung einer großen Anzahl von Barcodes in Massen.
Wie kann ich die maximale Anzahl paralleler Threads in IronBarcode konfigurieren?
Sie können die maximale Anzahl paralleler Threads in IronBarcode konfigurieren, indem Sie die entsprechende Methode in Ihrem C#-Code verwenden, um die gewünschte Anzahl von Threads für Barcode-Generierungsaufgaben festzulegen.
Warum ist es wichtig, die Leistung bei der Erstellung von Massenbarcodes zu optimieren?
Die Optimierung der Leistung für die Erstellung von Massenbarcodes stellt sicher, dass der Prozess effizient und schnell abläuft, wodurch der Zeit- und Ressourcenaufwand für die Erzeugung einer großen Menge von Barcodes reduziert wird, was für Anwendungen mit hohen Durchsatzanforderungen unerlässlich ist.
Was sind die Vorteile der Parallelverarbeitung in IronBarcode?
Die parallele Verarbeitung in IronBarcode ermöglicht eine schnellere Barcode-Erzeugung durch die Nutzung mehrerer CPU-Kerne, was zu einer verbesserten Anwendungsleistung und kürzeren Verarbeitungszeiten für umfangreiche Barcode-Aufgaben führt.
Kann sich die Einstellung zu vieler paralleler Threads negativ auf die Leistung auswirken?
Ja, das Einrichten zu vieler paralleler Threads kann zu Ressourcenkonflikten und erhöhtem Overhead führen, was die Leistung beeinträchtigen kann. Es ist wichtig, eine ausgewogene Konfiguration zu finden, die den Fähigkeiten Ihres Systems entspricht.
Welche Überlegungen sollten bei der Auswahl der Anzahl der parallelen Threads angestellt werden?
Berücksichtigen Sie die Anzahl der verfügbaren CPU-Kerne, die Arbeitslast des Systems und die Art Ihrer Aufgaben zur Strichcodeerstellung. Es ist am besten, mit verschiedenen Einstellungen zu experimentieren, um die optimale Konfiguration zu finden.
Gibt es eine Standardeinstellung für parallele Threads in IronBarcode?
IronBarcode verfügt zwar über eine Standardeinstellung für parallele Threads, es wird jedoch empfohlen, diese Einstellung auf der Grundlage Ihrer spezifischen Anwendungsanforderungen anzupassen, um die beste Leistung zu erzielen.
Wie handhabt IronBarcode das Thread-Management?
IronBarcode for .NET nutzt die Threading-Fähigkeiten von .NET, um die parallele Verarbeitung zu verwalten und ermöglicht es Entwicklern, die Anzahl der Threads festzulegen, um die Leistung effektiv zu optimieren.
Kann ich die Anzahl der parallelen Threads während der Ausführung dynamisch ändern?
Es ist nicht empfehlenswert, die Anzahl der parallelen Threads während der Ausführung dynamisch zu ändern, da dies zu Inkonsistenzen führen und die Leistungsstabilität beeinträchtigen kann. Es ist am besten, die Konfiguration vor dem Start der Barcode-Generierung festzulegen.
Was sind häufige Anwendungsfälle für die Einstellung der maximalen Anzahl paralleler Threads bei der Barcode-Generierung?
Häufige Anwendungsfälle sind Anwendungen, die eine schnelle Barcode-Erzeugung erfordern, wie z. B. Bestandsverwaltungssysteme, Kassensysteme im Einzelhandel und Logistikanwendungen, bei denen die schnelle Verarbeitung großer Mengen von Barcodes entscheidend ist.

