Barkod Kullanarak Async ve Çoklu İşi C# Dilinde Nasıl Kullanılır

IronBarcode ile C#'de Async ve Çok İşlemli Kullanım

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

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.

  1. NuGet Paket Yöneticisi ile https://www.nuget.org/packages/BarCode yükleyin

    PM > Install-Package BarCode
  2. 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 });
  3. Canlı ortamınızda test etmek için dağıtın

    Bugün projenizde IronBarcode kullanmaya başlayın ücretsiz deneme ile

    arrow pointer


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
$vbLabelText   $csharpLabel

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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:

  1. Tikanmalar: UI bağlamlarında async yöntemler üzerinde Result veya Wait() kullanmaktan kaçının. Çağrı zinciri boyunca her zaman await kullanın.

  2. Hata Yönetimi: Asenkron yöntemlerdeki istisnalar beklenildiği gibi yayılmayabileceğinden, asenkron çağrıları try-catch bloklarında sarın.

  3. Bağlam Değiştirme: Orijinal senkronizasyon bağlamına geri dönmenize gerek olmadığında, ConfigureAwait(false) kullanımını düşünün.

  4. 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.

Lütfen dikkate alinMevcut çekirdekleri bulmak için: Görev Yöneticisi -> Performans sekmesi -> CPU'ya tıklayın. 'Çekirdekler' alanı sayıyı gösterir.

: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
$vbLabelText   $csharpLabel

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ü

Çok iş parçacıklı barkod okuma gösterimi için 0 123456 789012 numarasını gösteren UPC-A barkod örneği
Çok iş parçacıklı barkod okuma gösterimi için 771234567003 numarasını gösteren UPC-A barkod örneği
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:

  1. 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
  2. Toplu İşlem: Birden bağımsız görüntülerin aynı anda işlenmesi gerekiyor
  3. Çok Çekirdekli Sistemler: Dağıtım ortamında birden fazla CPU çekirdeği olmalı
  4. Performans Kritiği: Ham işlem hızı kaynak verimliliğinden daha önemlidir

Asenkron işlemleri şu durumlarda seçin:

  1. I/O Bağlı İşlemler: Çoğu zaman dosyaların okunması veya ağ yanıtlarının beklenmesiyle ilgilidir
  2. UI Uygulamaları: Duyarlı kullanıcı ara yüzlerini muhafaza etmek çok önemlidir
  3. Sınırlı Kaynaklar: Sınırlı CPU çekirdeklerine sahip sistemlerde çalışmak
  4. 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:

  1. Mevcut CPU Cores: Temel olarak Environment.ProcessorCount ile başlayın
  2. İş Yükü Türü: Saf barkod okumaları için mevcut çekirdeklerin %75'ini kullanın
  3. Sistem Kaynakları: İşletim sistemi ve diğer işlemler için boşluk bırakın
  4. 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);
$vbLabelText   $csharpLabel

Ü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.

Hairil Hasyimi Bin Omar
Yazılım Mühendisi
Tüm harika mühendisler gibi, Hairil de hevesli bir öğrenendir. C#, Python ve Java bilgilerini keskinleştiriyor ve bu bilgilerini, Iron Software ekibi genelinde takım üyelerine değer katmak için kullanıyor. Hairil, Malezya'daki Universiti Teknologi MARA'dan mezun olan Ek Kimya ve Süreç Mühendisliği ...
Daha Fazlasını Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 2,169,908 | Sürüm: 2026.4 just released
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package BarCode
bir örnek çalıştırın dize barkod haline geldiğini görün.