So legen Sie die maximale Anzahl paralleler Threads fest

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

Beim Einlesen 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 die gesamte Rechenleistung effektiv vervielfacht und die Zeit für die Ausführung eines Stapelverarbeitungsauftrags drastisch reduziert wird.

Die Festlegung einer maximalen Anzahl dieser Threads ist eine effektive Methode zur Leistungsoptimierung. Dadurch wird sichergestellt, dass die Anwendung das volle Potenzial der Hardware ausschöpft, indem die Arbeitslast gleichmäßig auf die Prozessorkerne verteilt wird. Dieser Ansatz maximiert die Effizienz, indem er einen reibungslosen Ablauf der Anwendung gewährleistet und gleichzeitig schnellstmögliche Ergebnisse liefert.

IronBarcode bietet eine einfache Möglichkeit, dieses Limit zu kontrollieren und so eine optimale Maschinenleistung zu gewährleisten. Im folgenden Abschnitt wird gezeigt, wie man diese Thread-Limits einfach festlegen kann.

Erste Schritte mit IronBarcode



Maximale Anzahl paralleler Threads festlegen

In diesem Beispiel verwenden wir eine große Menge an Barcode-Bildern, um die Skalierbarkeit und Effizienz eines Multithread-Prozesses im Vergleich zu einem Singlethread-Prozess 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 der Konfiguration der Einstellungen werden zahlreiche Barcode-Bilder aus dem Ordner importiert. Anschließend wird mithilfe einer Schleife das Verzeichnis der Barcode-Bilder mit der Read Methode gelesen, wobei der Dateipfad und die konfigurierten BarcodeReaderOptions übergeben werden. Schließlich werden der Barcode-Wert und der Barcode-Typ durch Zugriff auf BarcodeResults angezeigt.

:path=/static-assets/barcode/content-code-examples/how-to/set-max-parallel-thread.cs
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}");
            
    }
    
}

$vbLabelText   $csharpLabel

Ausgabe

Multithread-Ausgabe

Wie aus der Konsolenausgabe hervorgeht, werden der Barcode-Wert und der Typ für jedes entsprechende Bild angezeigt.

Einstellen des geeigneten maximalen parallelen Threads

Wenn die Multithreaded Eigenschaft auf "true" gesetzt ist, ist der Standardwert für die MaxParallelThreads -Eigenschaft 4. Obwohl es keine feste Obergrenze für den 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. Dies liegt daran, dass der Prozessor übermäßige Kontextwechsel nicht bewältigen kann, was potenziell zu Mehraufwand statt zu Geschwindigkeitssteigerungen 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 darstellen, jedoch mit einem Timer, um den Standardwert von 4 mit der Verwendung Environment.ProcessorCount zu vergleichen, um alle verfügbaren Threads zu nutzen. 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");
$vbLabelText   $csharpLabel

Ausgabe

Verarbeitungszeit mit 4 Threads

4 Prozessoren

Die Bearbeitungszeit für diesen Vorgang beträgt 84 Sekunden.

Prozesszeit mit Umgebung Prozessoranzahl

32 Prozessor

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. Beachten Sie jedoch, dass die Verwendung von mehr Threads keine Leistungssteigerung garantiert, da diese vom Hostprozessor abhängt. Als Faustregel gilt, die maximale Anzahl verfügbarer Prozessoren abzüglich eines Prozessors zu verwenden, um sicherzustellen, dass noch ein einziger Thread für andere Systemoperationen zur Verfügung steht.

Warnung Die Projektumgebung muss so konfiguriert sein, dass Multithreading möglich ist. Andernfalls führt das Aktivieren Multithreaded und true Erhöhen MaxParallelThreads nicht zu einer Verbesserung der Prozessgeschwindigkeit, sondern kann diese sogar verringern.

Häufig gestellte Fragen

Welchen Zweck hat die Einstellung der maximalen Anzahl paralleler Threads in IronBarcode?

Durch die Festlegung der maximalen Anzahl paralleler Threads können Sie die Leistung der Barcode-Generierung optimieren, indem Sie die Systemressourcen effizient nutzen, insbesondere bei der Verarbeitung einer großen Anzahl von Barcodes in großen Mengen.

Wie kann ich die maximale Anzahl paralleler Threads in IronBarcode konfigurieren?

Sie können die maximale Anzahl paralleler Threads in IronBarcode konfigurieren, indem Sie in Ihrem C#-Code die entsprechende Methode verwenden, um die gewünschte Anzahl von Threads für Barcode-Generierungsaufgaben festzulegen.

Warum ist die Leistungsoptimierung bei der Massenerstellung von Barcodes wichtig?

Durch die Optimierung der Leistung bei der Massenerstellung von Barcodes wird sichergestellt, dass der Prozess effizient und schnell abläuft. Dadurch werden der Zeit- und Ressourcenaufwand für die Generierung einer großen Menge an Barcodes reduziert, was für Anwendungen mit hohem Durchsatzbedarf unerlässlich ist.

Welche Vorteile bietet die Verwendung von Parallelverarbeitung in IronBarcode?

Die Parallelverarbeitung in IronBarcode ermöglicht eine schnellere Barcode-Generierung durch die Nutzung mehrerer CPU-Kerne, was zu einer verbesserten Anwendungsleistung und reduzierter Verarbeitungszeit bei umfangreichen Barcode-Aufgaben führt.

Kann eine zu hohe Anzahl paralleler Threads die Leistung negativ beeinflussen?

Ja, zu viele parallele Threads können zu Ressourcenkonflikten und erhöhtem Overhead führen und dadurch die Leistung beeinträchtigen. Es ist wichtig, eine ausgewogene Konfiguration zu finden, die den Fähigkeiten Ihres Systems entspricht.

Welche Überlegungen sollten bei der Wahl der Anzahl paralleler Threads angestellt werden?

Zu berücksichtigen sind die Anzahl der verfügbaren CPU-Kerne, die Systemauslastung und die Art Ihrer Barcode-Generierungsaufgaben. Es empfiehlt sich, mit verschiedenen Einstellungen zu experimentieren, um die optimale Konfiguration zu finden.

Gibt es in IronBarcode eine Standardeinstellung für parallele Threads?

IronBarcode verfügt möglicherweise über eine Standardeinstellung für parallele Threads. Es wird jedoch empfohlen, diese Einstellung an die spezifischen Anforderungen Ihrer Anwendung anzupassen, um die beste Leistung zu erzielen.

Wie handhabt IronBarcode das Thread-Management?

IronBarcode nutzt die Threading-Funktionen von .NET zur Verwaltung der Parallelverarbeitung, sodass Entwickler die Anzahl der Threads festlegen und die Leistung effektiv optimieren können.

Kann ich die Anzahl der parallelen Threads während der Ausführung dynamisch ändern?

Die dynamische Änderung der Anzahl paralleler Threads während der Ausführung ist nicht empfehlenswert, da dies zu Inkonsistenzen führen und die Stabilität der Performance beeinträchtigen kann. Es empfiehlt sich, die Konfiguration vor Beginn der Barcode-Generierung festzulegen.

Was sind einige gängige Anwendungsfälle für die Festlegung einer maximalen Anzahl paralleler Threads bei der Barcode-Generierung?

Typische Anwendungsfälle sind Anwendungen, die eine schnelle Barcode-Generierung erfordern, wie z. B. Bestandsverwaltungssysteme, Kassensysteme im Einzelhandel und Logistikanwendungen, bei denen die schnelle Verarbeitung großer Mengen von Barcodes von entscheidender Bedeutung ist.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 2,035,202 | Version: 2025.12 gerade veröffentlicht