最大並列スレッド数を設定する方法

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

大量のバーコードを読み取る場合、シングルスレッド プロセスに依存すると、パフォーマンスのボトルネックが発生し、スケーラビリティが制限される可能性があります。 ただし、並列スレッドを使用すると、アプリケーションは複数の画像を同時に処理できるため、全体的な処理能力が効果的に向上し、バッチ ジョブを完了するのにかかる時間が大幅に短縮されます。

これらのスレッドに最大制限を設定することは、パフォーマンスを最適化する強力な方法です。 プロセッサ コア間でワークロードを分散させることにより、アプリケーションがハードウェアの潜在能力を最大限に活用できるようにします。 このアプローチにより効率が最大化され、アプリケーションがスムーズに実行されながら、可能な限り最速の結果がもたらされます。

IronBarcode は、この制限を制御する簡単な方法を提供し、最適なマシン パフォーマンスが実現されることを保証します。 次のセクションでは、これらのスレッド制限を簡単に設定する方法を説明します。

IronBarcodeを使い始める



最大並列スレッド数を設定する

この例では、大量のバーコード画像を使用して、シングルスレッド プロセスではなくマルチスレッド プロセスを使用した場合のスケーラビリティと効率性を説明します。 画像フォルダはここからダウンロードできます。

IronBarcode が複数のスレッドを使用するように構成するには、まずMultithreadedを true に設定して新しいBarcodeReaderOptionsオブジェクトをインスタンス化します。 その後、整数値を割り当てることによってMaxParallelThreadsプロパティが設定されます。 デフォルトでは、 MaxParallelThreadsは 4 に設定されています。

設定後、フォルダーから大量のバーコード画像がインポートされます。 次に、ループを使用して、ファイル パスと構成されたBarcodeReaderOptionsを渡して、 Readメソッドでバーコード イメージ ディレクトリを読み取ります。 最後に、 BarcodeResultsにアクセスしてバーコードの値と種類を表示します。

: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

出力

マルチスレッド出力

コンソール出力に示されているように、対応する画像ごとにバーコードの値とタイプが表示されます。

適切な最大並列スレッド数の設定

Multithreadedプロパティが true に設定されている場合、 MaxParallelThreadsプロパティはデフォルトで 4 に設定されます。 MaxParallelThreadsに割り当てられる整数には厳密な制限はありませんが、ハードウェアの論理コア容量よりも高い値を設定すると、実際にはパフォーマンスが低下する可能性があります。 これは、プロセッサが過度のコンテキスト切り替えを処理できず、速度ではなくオーバーヘッドが発生する可能性があるためです。 したがって、 MaxParallelThreadsの正しい値はコンピューターの仕様によって異なり、開発者はテストを行って自分の環境に最適な値を見つける必要があります。

この例では、上記と同じマルチスレッド シナリオを紹介しますが、タイマーを設定して、デフォルト値の 4 とEnvironment.ProcessorCountを使用して利用可能なすべてのスレッドを活用します。 この例では、32 個の論理プロセッサを搭載したコンピュータを使用しているため、 MaxParallelThreads 32 に設定されます。

: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

出力

4スレッドでの処理時間

4プロセッサ

このプロセスの処理時間は 84 秒です。

環境 ProcessorCount によるプロセス時間

32 プロセッサ

ご覧のとおり、この操作の処理時間は 53 秒で、4 つのスレッドのみで実行する場合よりも大幅に高速です。 ただし、ホスト プロセッサに依存するため、スレッド数を増やしてもパフォーマンスが向上するとは限らないことに注意してください。 一般的な目安としては、使用可能なプロセッサの最大数から 1 を引いた数を使用し、他のシステム操作に使用可能なスレッドが 1 つ残るようにします。

警告 プロジェクト環境は、マルチスレッドを許可するように構成する必要があります。 それ以外の場合、 Multithreaded trueに設定し、 MaxParallelThreads増やしてもプロセス速度は向上せず、むしろ低下する可能性があります。

よくある質問

IronBarcode で最大並列スレッドを設定する目的は何ですか?

最大並列スレッド数を設定すると、特に大量のバーコードを一括処理する場合に、システム リソースを効率的に使用してバーコード生成のパフォーマンスを最適化できます。

IronBarcode で最大並列スレッドを構成するにはどうすればよいですか?

C# コード内の適切なメソッドを使用してバーコード生成タスクに必要なスレッド数を設定することにより、IronBarcode の最大並列スレッドを構成できます。

大量のバーコード作成のパフォーマンスを最適化することが重要なのはなぜですか?

大量のバーコード作成のパフォーマンスを最適化することで、プロセスが効率的かつ高速になり、大量のバーコードを生成するために必要な時間とリソースが削減されます。これは、高スループットが求められるアプリケーションにとって不可欠です。

IronBarcode で並列処理を使用する利点は何ですか?

IronBarcode の並列処理により、複数の CPU コアを活用してバーコードをより高速に生成できるため、アプリケーションのパフォーマンスが向上し、大規模なバーコード タスクの処理時間が短縮されます。

並列スレッドを多すぎる数に設定すると、パフォーマンスに悪影響が出る可能性がありますか?

はい、並列スレッドを多すぎる数に設定すると、リソースの競合やオーバーヘッドの増加につながり、パフォーマンスが低下する可能性があります。システムの能力に合ったバランスの取れた構成を見つけることが重要です。

並列スレッドの数を選択する際にはどのような点に留意すべきでしょうか?

利用可能なCPUコアの数、システムのワークロード、バーコード生成タスクの性質などを考慮してください。最適な構成を見つけるには、さまざまな設定を試してみることをお勧めします。

IronBarcode には並列スレッドのデフォルト設定がありますか?

IronBarcode には並列スレッドのデフォルト設定がある場合がありますが、最高のパフォーマンスを実現するには、特定のアプリケーションのニーズに基づいてこの設定をカスタマイズすることをお勧めします。

IronBarcode はスレッド管理をどのように処理しますか?

IronBarcode は .NET のスレッド機能を活用して並列処理を管理し、開発者がスレッドの数を指定してパフォーマンスを効果的に最適化できるようにします。

実行中に並列スレッドの数を動的に変更できますか?

実行中に並列スレッド数を動的に変更することは、不整合が発生し、パフォーマンスの安定性に影響を与える可能性があるため、推奨されません。バーコード生成プロセスを開始する前に設定を行うことをお勧めします。

バーコード生成で最大並列スレッドを設定する一般的な使用例は何ですか?

一般的な使用例には、在庫管理システム、小売 POS システム、大量のバーコードを迅速に処理することが重要な物流アプリケーションなど、高速バーコード生成を必要とするアプリケーションが含まれます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 2,035,202 | バージョン: 2025.12 リリース