C#で非同期とマルチスレッドを使う方法 with IronBarcode
IronBarcodeの非同期処理とマルチスレッド処理では、バーコード読み取り性能の最適化が異なります。非同期処理ではI/O処理中にメインスレッドがブロックされるのを防ぎ、マルチスレッド処理ではCPUコア間で複数のバーコードを同時に処理します。
開発者はしばしばMultithreadingの操作を混同します。 どちらの手法も、システムリソースの利用を最適化し、実行時間を短縮することで、プログラムのパフォーマンスと効率を高めます。しかし、アプローチ、メカニズム、使用例が異なります。 IronBarcodeは両方のアプローチをサポートしています。 この記事では、IronBarcodeを使用したそれぞれの違いや実装について説明します。
このワンラインの例を使用して、即座にIronBarcodeで開始できます。 非同期読み取りとマルチスレッドオプションを組み合わせて、最小限の設定で複数のバーコード画像を並行してスキャンする方法を示しています。
-
1Install IronBarcode with NuGet Package Manager
-
2このコード スニペットをコピーして実行します。
var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true });C# -
3実際の環境でテストするためにデプロイする
今日プロジェクトで IronBarcode を使い始めましょう無料トライアル
最小限のワークフロー(5ステップ)
- 非同期およびマルチスレッドをサポートするC#ライブラリをダウンロードする
- 画像や PDF から非同期にバーコードを読み取るには、
ReadAsyncとReadPdfAsyncメソッドを使用します。 - Multithreadedプロパティを 'true' に設定してマルチスレッドを有効にします。
- MaxParallelThreadsプロパティを使用して並列スレッド数を指定します
- 通常、非同期、マルチスレッドのバーコード読み取りのパフォーマンス比較を確認する
IronBarcodeで非同期にBarCodeを読み取るには?
非同期読み取りにより、長時間またはブロッキング操作がメインスレッドの実行をブロックせずに進行できるようになります。 C#では、非同期機能をサポートするメソッドと一緒にawaitキーワードを使用します。 このアプローチは、追加のスレッドを作成するのではなく、現在のスレッドを解放します。 メインスレッドはタスクを開始し管理しますが、1つのタスクだけに専念するわけではありません。 メインスレッドは、非同期メソッドに関与する必要があるときに戻り、不要なときに他のタスクを処理するために解放されます-ファイルの読み取り/書き込みやネットワーク要求のようなI/Oバウンドタスクに特に便利です。
バーコードの読み取りを例に考えてみましょう。 プロセスには以下が含まれます:
- ファイルの読み取り
- 読み取りオプションの適用
- バーコードのデコード
ファイル読み取り中に、メインタスクが解放されることがあります。 これは、バーコードを読むチュートリアルで示したように、複数の画像ファイルや大きなPDFを使用するシナリオに役立ちます。
バーコードを非同期で読み取るためには、画像とPDFドキュメント用にそれぞれReadPdfAsyncメソッドを使用します。 非同期処理を実装する前に、プロジェクトにNuGet経由でIronBarcodeをインストールしていることを確認してください。
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上記のコードスニペットは、IronBarcodeによって非同期で読み取られる画像パスのListをインスタンス化します。 画像を読み取るためには、ReadAsyncメソッドを使用します。 imagePathsと読み取りオプションを指定します。 高度な設定オプションについては、BarCodeリーダー設定のガイドを参照してください。
この非同期操作メソッドは、同じクラス内のReadPdfAsyncを介してPDFドキュメントでバーコードを読み取ることもできます。 特定のPDF読み取り設定については、PDFバーコードリーダー設定ガイドを参照してください。
Multithreaded
MaxParallelThreads
通常のメソッドよりも非同期読み取りを使用するのはいつですか?
非同期読み上げは、いくつかのシナリオで優れています:
1.GUIアプリケーション:UI応答性を必要とするWindowsフォームまたはWPFアプリケーション。 Asyncは、バーコードスキャン中のインターフェイスのフリーズを防ぎます。
2.Webアプリケーション:ASP.NETアプリケーションは、特にアップロードされたバーコード画像を処理するときに、スレッドをブロックすることなく複数の同時リクエストを処理します。
3.バッチ処理: 複数の BarCode イメージや PDF を連続して読み取り、I/O 操作中に他のタスクを実行できるようにします。
4.ネットワーク操作:read barcodes from URL asynchronously example で示したように、リモート ソースまたは URL から BarCode を読み取ります。
なぜ非同期読み取りはアプリケーションの応答性を向上させるのですか?
非同期読み取りは、I/Oバウンド操作中にメインスレッドを解放することによって応答性を向上させます。 IronBarcodeがディスクからイメージファイルを読み込んだり、PDFを処理するとき、スレッドはアイドル待機しません。 その代わり、ユーザー入力への応答やリクエストの処理など、その他のタスクを処理します。 これは、特に次のような場合に顕著です:
- 読み込みに時間がかかる大きな画像ファイル
- バーコードを含む複数ページのPDF
- ネットワークベースの画像ソース
- バーコード検出の前に画像補正フィルタを必要とするシナリオ
非同期バーコード読み取りを使用するときの一般的な落とし穴は何ですか?
非同期の BarCode 読み取りを実装する場合は、以下の一般的な問題に注意してください:
- デッドロック: UIコンテキストでの非同期メソッドには
Wait()を避けます。 常に呼び出しチェーン全体でawaitを使用してください。
2.例外処理:非同期メソッド内の例外は期待どおりに伝播しない可能性があるため、try-catch ブロックで非同期呼び出しをラップしてください。
- コンテキストスイッチング: 元の同期コンテキストに戻る必要がない場合には
ConfigureAwait(false)の使用を検討します。
4.パフォーマンスの誤解:非同期は個々の操作を高速化しない; アプリケーションの応答性が向上します。 複数の画像によるスピードアップのために、マルチスレッドを検討してください。
非同期関連の問題のトラブルシューティングについては、BarCode認識トラブルシューティングガイドを参照してください。
マルチスレッド バーコード読み取りを有効にするにはどうすればよいですか?
非同期操作とは異なり、マルチスレッドは、複数のスレッドにまたがって単一のプロセスを同時に実行します。 マルチスレッドは、単一のスレッドで逐次実行する代わりに、タスクを複数のスレッドに分割して同時実行します。 マルチスレッドには複数のCPUコアが必要で、これらのコアは独立してスレッドを実行します。 非同期操作と同様に、マルチスレッドはアプリケーションのパフォーマンスと応答性を向上させます。
IronBarcodeでは、MaxParallelThreadsを使用して並行実行のための最大コア数を指定することでマルチスレッドを有効にします。 デフォルトのMaxParallelThreads値は4で、利用可能なCPUコアに基づいて調整可能です。 最適なパフォーマンス設定については、読書速度オプションガイドを参照してください。
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どの程度のパフォーマンス向上が期待できますか?
2つのサンプル画像を読み取り、通常操作、非同期操作、マルチスレッド操作の読み取り時間を比較してみましょう。
サンプル画像


| 通常の読み取り | 非同期読み取り | マルチスレッド読み取り(4コア) |
|---|---|---|
| 01.75秒 | 01.67秒 | 01.17秒 |
この比較では、非同期読み取りとマルチスレッド読み取りによってパフォーマンスが大幅に向上することが示されています。 マルチスレッディングは、通常の読み取りと比較して約33%の改善をもたらし、非同期は約5%の改善をもたらします。 しかし、これらの業務は、目的やアプローチが異なります。 アプリケーションの要件に最も適したアプローチを選択してください。
パフォーマンスの向上は、以下によって異なります:
- 処理画像数
- 画像の複雑さとバーコードの品質
- 使用可能なCPUコア
- その他のシステムリソース
1つのドキュメントに複数の BarCode がある場合は、Read Multiple Barcodes ガイドをご覧ください。
いつ非同期操作よりもマルチスレッドを選択すべきですか?
マルチスレッドを選択する場合
- CPU負荷の高い操作: 複雑な画像フィルターや高解像度画像のような重い計算を伴うプロセス
- バッチ処理: 複数の独立した画像を同時に処理する必要がある
- マルチコアシステム: 配備環境に複数のCPUコアが利用可能
- パフォーマンスが重要: リソース効率よりも処理速度が重要
非同期処理を選択するのは、次のような場合です:
- I/O負荷の高い操作: 主にファイルを読み込むか、ネットワーク応答を待つ時間が多い
- UIアプリケーション: ユーザーインターフェースの応答性を保つことが重要
- リソースが限られている: 限られたCPUコアで動作するシステムで実行 4.Webアプリケーション: 複数の同時リクエストを効率的に処理する
最適な MaxParallelThreads 値はどのように決定しますか?
最適なMaxParallelThreads値は、いくつかの要因に依存します:
- 利用可能なCPUコア: 基準として
Environment.ProcessorCountから始めます - ワークロードタイプ: 単純なバーコード読み取りのために、使用可能なコアの75%を使用
- システムリソース: OSや他のプロセスのための予備を残す
- テスト結果: 特定のワークロードでベンチマークする
最適な値を見つけるための実践的なアプローチをご紹介します:
int optimalThreads = Math.Max(1, Environment.ProcessorCount - 1);net本番環境では、パフォーマンスを監視し、実際の使用パターンに基づいて調整します。 最大限のパフォーマンスを必要とするエンタープライズ展開には、ライセンス キー構成の実装を検討してください。
完全なAPI機能については、IronBarcode API Referenceを参照してください。
よくある質問
BarCode を読み取る際の非同期とマルチスレッドの違いは何ですか?
IronBarcodeでは、非同期処理によりファイル読み取りなどのI/Oタスク中にメインスレッドがブロックされるのを防ぎ、マルチスレッドによりCPUコア間で複数のバーコードを同時に処理します。asyncはasync/awaitキーワードを使用して長い操作中にメインスレッドを解放し、マルチスレッドは複数のスレッドを作成して並列にバーコード処理を行います。
C#で非同期バーコード読み取りを実装するには?
IronBarcodeは非同期バーコード読み取り用にReadAsync()とReadPdfAsync()メソッドを提供しています。C#のasync/awaitキーワードでこれらのメソッドを使用するだけで、メインスレッドをブロックすることなく画像やPDFからバーコードを読み取ることができます。これは、複数の画像ファイルや大きなPDF文書を処理する場合に特に有益です。
バーコード処理でマルチスレッドを有効にするにはどうすればよいですか?
IronBarcodeでマルチスレッドを有効にするには、BarcodeReaderOptionsでMultithreadedプロパティを'true'に設定します。また、MaxParallelThreadsプロパティを使用して並列スレッド数を制御することができますので、システムの能力に応じてパフォーマンスを最適化することができます。
パフォーマンスを最適化するために、非同期処理とマルチスレッド処理を組み合わせることはできますか?
はい、IronBarcodeでは両方のアプローチを組み合わせることができます。Multithreaded = trueを設定し、BarcodeReaderOptionsでMaxParallelThreadsを設定することで、マルチスレッドを有効にしてReadAsync()を使用することができます。この組み合わせは、ノンブロッキング I/O 操作と複数の CPU コアにわたる並列処理の両方を提供します。
BarCode の読み取りには、いつ非同期とマルチスレッドを使い分ける必要がありますか?
IronBarcodeで大きなファイルの読み込みやネットワークリクエストのようなI/Oバウンドタスクを扱うときは、UIのフリーズを防ぐために非同期オペレーションを使用してください。複数のBarCodeを同時に処理する必要があり、CPUリソースに余裕がある場合はマルチスレッドを使用します。最良の結果を得るには、複数の大きなバーコード画像やPDFを処理するときに両方のアプローチを組み合わせてください。
What factors affect the optimal 'MaxParallelThreads' setting in IronBarcode?
The optimal 'MaxParallelThreads' value is influenced by available CPU cores, workload type, overall system resources, and testing results. A practical starting point is to use one less than the total available CPU cores.
How does IronBarcode's async functionality improve application responsiveness?
Async functionality in IronBarcode increases application responsiveness by freeing the main thread during long I/O-bound barcode reading tasks, allowing the application to handle other processes concurrently, such as user interface updates.
What are the advantages of using multithreading in barcode reading?
Multithreading allows simultaneous processing of multiple images, which enhances performance in CPU-bound operations such as processing complex image filters or high-resolution images. This is beneficial in environments with multiple CPU cores.
How can I implement license key configuration for optimal performance in IronBarcode?
For enterprise deployments requiring maximum performance, consider implementing license key configuration. This can be done by following IronBarcode's documentation on license key settings to fully unlock features and optimize resource utilization.
What are the key differences between async and multithreading in IronBarcode?
Async in IronBarcode prevents blocking the main thread during I/O operations, ideal for file and network tasks, whereas multithreading divides tasks among threads for concurrent execution across CPU cores, improving performance in CPU-bound operations.
