IronBarcode ile C#'de Async ve Çok İşlemli Kullanım
IronBarcode'da Async ve çok iş parçacıklılık, barkod okuma performansını farklı şekilde optimize eder — async, I/O işlemleri sırasında ana iş parçacığının bloklanmasını önlerken çok iş parçacıklılık, aynı anda birden fazla barkodun CPU çekirdekleri üzerinde işlenmesini sağlar.
Geliştiriciler sıklıkla Async ve Multithreading işlemlerini karıştırırlar. Her iki yöntem de sistem kaynak kullanımını ve işletim süresini optimize ederek program performansını ve verimliliğini artırır. Ancak, yöntem, mekanizma ve kullanım durumlarında farklılıklar gösterir. IronBarcode her iki yaklaşımı da desteklemektedir. Bu makale, IronBarcode kullanarak bunların arasındaki farkları ve uygulanışı araştırmaktadır.
Hızlı Başlangıç: Async & Çok İşlemli Barkod Okuma Örneği
IronBarcode ile hemen başlamak için bu tek satırlık örneği kullanın. Asenkron okuma ve çok iş parçacıklılık seçeneklerini bir araya getirmenin ve paralel olarak birden çok barkod görüntüsünü taramanın ne kadar kolay olduğunu gösterir.
-
NuGet Paket Yöneticisi ile https://www.nuget.org/packages/BarCode yükleyin
PM > Install-Package BarCode -
Bu kod parçasını kopyalayıp çalıştırın.
var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true }); -
Canlı ortamınızda test etmek için dağıtın
Bugün projenizde IronBarcode kullanmaya başlayın ücretsiz deneme ile
Minimal İş Akışı (5 Adımda)
- Asenkron ve çok işem li destek için C# kütüphanesini indirin
- Görüntüler ve PDF'lerden asenkron barkod okuması için
ReadAsyncveReadPdfAsyncyöntemlerini kullanın - Multithreaded özelliğini 'true' olarak ayarlayarak çok işemliliği etkinleştirin
- Paralel iş parçacığı sayısını MaxParallelThreads özelliği ile belirleyin
- Normal, asenkron ve çok işemli barkod okuması arasındaki performans karşılaştırmasını kontrol edin
IronBarcode ile Barkodları Asenkron Olarak Nasıl Okurum?
Asenkron okuma, uzun veya engelleyici işlemlerin ana iş parçacığının yürütülmesini engellemeden devam etmesini sağlar. C#'ta, asenkron işlevleri destekleyen yöntemlerle birlikte async ve await anahtar kelimelerini kullanın. Bu yaklaşım ek iş parçacıkları oluşturmadan mevcut iş parçacığını serbest bırakır. Ana iş parçacığı görevleri başlatır ve yönetir, ancak yalnızca tek bir göreve özel kalmaz. Ana iş parçacığı, asenkron yöntem katılımını gerektirdiğinde geri döner ve ihtiyaç olmadığında diğer görevleri halledebilir - özellikle dosya okuma/yazma veya ağ istekleri gibi I/O tabanlı görevlerde faydalıdır.
Örnek olarak barkod okumayı düşünün. Süreç şunları içerir:
- Dosyayı okumak
- Okuma seçeneklerini uygulamak
- Barkodu çözmek
Dosya okuma sırasında ana görev serbest bırakılabilir. Bu, birden çok görüntü dosyası veya büyük PDF'ler içeren senaryolarda avantaj sağlar, barkod okuma öğreticimizde gösterildiği gibi.
Barkodları, sırasıyla görüntüler ve PDF belgeleri için asenkron olarak okumak için ReadAsync ve ReadPdfAsync yöntemlerini kullanın. Asenkron işlemleri uygulamadan önce, projenizde IronBarcode'u NuGet aracılığıyla yüklemiş olduğunuzdan emin olun.
: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
Yukarıdaki kod parçacığı, IronBarcode tarafından asenkron olarak okunacak görüntü yollarının bir Listesini oluşturur. Görüntüleri okumak için, BarcodeReader sınıfından ReadAsync yöntemini kullanın. imagePaths ve okuma seçeneklerini belirtin. Gelişmiş yapılandırma seçenekleri için barkod okuyucu ayarları kılavuzumuza bakın.
Bu asenkron işlem yöntemi, aynı sınıftaki ReadPdfAsync ile PDF belgelerinde barkod okumak için de mevcuttur. Özel PDF okuma yapılandırmaları için, PDF barkod okuyucu ayarları kılavuzumuza bakın.
Asenkron Okumayı Normal Yöntemlerin Yerine Ne Zaman Kullanmalıyım?
Asenkron okuma birkaç senaryoda üstün gelmektedir:
-
GUI Uygulamaları: Kullanıcı ara yüzü duyarlılığı gerektiren Windows Forms veya WPF uygulamaları. Asenkron, barkod taraması sırasında arayüzün donmasını engeller.
-
Web Uygulamaları: Birden fazla eşzamanlı isteği iş parçacıklarını engellemeden işleyen ASP.NET uygulamaları, özellikle yüklenen barkod görüntülerini işlerken.
-
Toplu İşlem: Birden fazla barkod görüntüsü veya PDF'nin ardışık okunması, I/O işlemleri sırasında diğer görevlerin yürütülmesine olanak tanır.
- Ağ İşlemleri: Uzaktan kaynaklardan veya URL'lerden barkod okuma, URL'den asenkron olarak barkod okuma örneğimizde gösterildiği gibi.
Asenkron Okuma Neden Uygulama Duyarlılığını Artırır?
Asenkron okuma, I/O tabanlı işlemler sırasında ana iş parçacığını serbest bırakarak duyarlılığı artırır. IronBarcode bir resim dosyasını diske yazarken veya bir PDF'yi işlerken iş parçacığı boşta beklemez. Bunun yerine, diğer görevleri işlemek, kullanıcı girdisine yanıt vermek veya istekleri işlemek gibi şeyleri ele alır. Bu özellikle şunlarla çalışırken fark edilir:
- Önemli yükleme süresi gerektiren büyük resim dosyaları
- Barkod içeren çok sayfalı PDF'ler
- Ağ tabanlı görüntü kaynakları
- Barkod algılamadan önce görüntü düzeltme filtrelerine ihtiyaç duyulan senaryolar
Asenkron Barkod Okuma Kullanırken Yaygın Hatalar Nelerdir?
Asenkron barkod okuma uygularken, bu yaygın sorunlara dikkat edin:
-
Tikanmalar: UI bağlamlarında async yöntemler üzerinde
ResultveyaWait()kullanmaktan kaçının. Çağrı zinciri boyunca her zamanawaitkullanın. -
Hata Yönetimi: Asenkron yöntemlerdeki istisnalar beklenildiği gibi yayılmayabileceğinden, asenkron çağrıları try-catch bloklarında sarın.
-
Bağlam Değiştirme: Orijinal senkronizasyon bağlamına geri dönmenize gerek olmadığında,
ConfigureAwait(false)kullanımını düşünün. - Performans Yanılgıları: Asenkron bireysel işlemleri hızlandırmaz; uygulama duyarlılığını artırır. Birden fazla görüntüyle hız iyileştirmeleri için çoklu iş parçacıklarını düşünün.
Asenkron ile ilgili sorunları gidermek için barkod tanıma sorun giderme kılavuzumuza başvurun.
Çoklu İş Parçacıklı Barkod Okuma Nasıl Etkinleştirilir?
Asenkron işlemlerin aksine, çoklu iş parçacığı tek bir işlemi eşzamanlı olarak birden fazla iş parçacığında yürütür. Tek bir iş parçacığında ardışık yürütme yerine, çoklu iş parçacığı görevleri eşzamanlı yürütme için birden fazla iş parçacığı arasında böler. Çoklu iş parçacığı, bu çekirdeklerin bağımsız olarak iş parçacıklarını yürüttüğü için birden fazla CPU çekirdeğine ihtiyaç duyar. Asenkron işlemler gibi, çoklu iş parçacıkları da uygulama performansını ve duyarlılığını artırır.
IronBarcode'da, BarcodeReaderOptions içindeki MaxParallelThreads kullanarak eşzamanlı çalışma için maksimum çekirdekleri belirleyip Multithreaded özelliğini ayarlayarak çoklu iş parçacığını etkinleştirin. Varsayılan MaxParallelThreads değeri, mevcut CPU çekirdeklerine bağlı olarak ayarlanabilir ve 4'tur. Optimal performans yapılandırmaları için okuma hız seçenekleri kılavuzumuza bakın.
: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
Ne Kadar Performans İyileştirmesi Bekleyebilirim?
İki örnek görüntüyü okuyalım ve normal, asenkron ve çoklu iş parçacıklı işlemler arasında okuma sürelerini karşılaştıralım.
Örnek Görüntü
| Normal Okuma | Asenkron Okuma | Çoklu İş Parçacıklı Okuma (4 çekirdek) |
|---|---|---|
| 01.75 saniye | 01.67 saniye | 01.17 saniye |
Karşılaştırma, asenkron ve çoklu iş parçacıklı okumada önemli performans artışlarını göstermektedir. Çoklu iş parçacığı, normal okumaya göre yaklaşık %33 iyileştirme sağlar, asenkron ise yaklaşık %5 iyileştirme sunar. Ancak, bu işlemler farklı amaçlar ve yaklaşımlar için hizmet eder. Uygulama gereksinimlerinize en iyi şekilde uyan yaklaşımı seçin.
Performans iyileştirmeleri şunlara göre değişir:
- İşlenen görüntü sayısı
- Görüntü karmaşıklığı ve barkod kalitesi
- Mevcut CPU çekirdekleri
- Diğer sistem kaynakları
Tek bir belge üzerindeki birden fazla barkod durumları için, Birden Fazla Barkodu Oku kılavuzuna göz atın.
Çoklu İş Parçacığını Asenkron İşlemler Üzerine Ne Zaman Seçmeliyim?
Aşağıdaki durumlarda çoklu iş parçacığını seçin:
- CPU Bağımlı İşlemler: Karmaşık görüntü filtreleri veya yüksek çözünürlüklü görüntüler gibi ağır hesaplamalar içeren işlemler
- Toplu İşlem: Birden bağımsız görüntülerin aynı anda işlenmesi gerekiyor
- Çok Çekirdekli Sistemler: Dağıtım ortamında birden fazla CPU çekirdeği olmalı
- Performans Kritiği: Ham işlem hızı kaynak verimliliğinden daha önemlidir
Asenkron işlemleri şu durumlarda seçin:
- I/O Bağlı İşlemler: Çoğu zaman dosyaların okunması veya ağ yanıtlarının beklenmesiyle ilgilidir
- UI Uygulamaları: Duyarlı kullanıcı ara yüzlerini muhafaza etmek çok önemlidir
- Sınırlı Kaynaklar: Sınırlı CPU çekirdeklerine sahip sistemlerde çalışmak
- Web Uygulamaları: Birden eşzamanlı istekleri verimli bir şekilde işlemek
Optimal MaxParallelThreads Değerini Nasıl Belirlerim?
Optimal MaxParallelThreads değeri birkaç faktöre bağlıdır:
- Mevcut CPU Cores: Temel olarak
Environment.ProcessorCountile başlayın - İş Yükü Türü: Saf barkod okumaları için mevcut çekirdeklerin %75'ini kullanın
- Sistem Kaynakları: İşletim sistemi ve diğer işlemler için boşluk bırakın
- Test Sonuçları: Belirli iş yükünüzle karşılaştırma yaparak ölçüm yapın
Optimum değeri bulmak için pratik bir yaklaşım:
int optimalThreads = Math.Max(1, Environment.ProcessorCount - 1);
int optimalThreads = Math.Max(1, Environment.ProcessorCount - 1);
Üretim ortamlarında performansı izleyin ve gerçek kullanım kalıplarına göre ayarlamalar yapın. En yüksek performansı gerektiren kurumsal dağıtımlar için lisans anahtarı konfigürasyonunu uygulamayı düşünün.
Tam API yetenekleri için IronBarcode API Referansına danışın.
Sıkça Sorulan Sorular
Barkod okunmasında eşzamanlılık ve çoklu iş parçacığı arasındaki fark nedir?
IronBarcode ile eşzamanlı işlemler, dosya okuma gibi I/O görevleri sırasında ana iş parçacığını bloke etmezken, çoklu iş parçacığı birden fazla barkodu CPU çekirdeklerinde eş zamanlı olarak işler. Async, uzun işlemler sırasında ana iş parçacığını serbest bırakmak için async/await anahtar kelimelerini kullanırken, çoklu iş parçacığı barkod işlemlerini paralel olarak gerçekleştirmek için birden fazla iş parçacığı oluşturur.
C#'da eşzamanlı barkod okuma nasıl uygulanır?
IronBarcode, eşzamanlı barkod okuma için ReadAsync() ve ReadPdfAsync() yöntemlerini sağlar. Bu yöntemleri C#'da async/await anahtar kelimeleriyle birlikte kullanarak barkodları görüntülerden ve PDF'lerden ana iş parçacığını bloke etmeden okuyun. Özellikle çoklu görüntü dosyası veya büyük PDF belgeleri işlerken faydalıdır.
Barkod işleme için nasıl çoklu iş parçacığı etkinleştirebilirim?
IronBarcode'da çoklu iş parçacığı etkinleştirmek için Barkod okuyucu Seçeneklerine Multithreaded özelliğini 'true' olarak ayarlayın. Ayrıca, MaxParallelThreads özelliğini kullanarak paralel iş parçacığı sayısını kontrol edebilir ve sisteminizin kapasitesi doğrultusunda performansı optimize edebilirsiniz.
En uygun performans için async ve çoklu iş parçacığını birleştirebilir miyim?
Evet, IronBarcode her iki yaklaşımı birleştirmenize izin verir. Multithreaded = true ayarlayarak ve Barkod Okuyucu Seçeneklerinde MaxParallelThreads yapılandırarak çoklu iş parçacığı etkin iken ReadAsync() kullanabilirsiniz. Bu kombinasyon, hem eşzamansız I/O işlemleri hem de birden fazla CPU çekirdeğinde paralel işlem sağlar.
Barkod okuma için ne zaman async yerine çoklu iş parçacığını kullanmalıyım?
IronBarcode'da büyük dosyaları okuma veya ağa istek yapma gibi I/O tabanlı görevlerde async işlemleri kullanın, çünkü bu UI donmasını önler. Birden fazla barkodu aynı anda işlemeye ihtiyaç duyduğunuzda ve CPU kaynaklarınız mevcut olduğunda çoklu iş parçacığını kullanın. Çok sayıda büyük barkod görüntüsü veya PDF'yi işlerken en iyi sonuçlar için her iki yaklaşımı da birleştirin.

