IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

C# Eşzamanlı Sözlük (Geliştiriciler için Nasıl Çalışır)

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 21 Nisan 2026

C# dilinde çok iş parçacıklı uygulamalarla çalışırken, veri bütünlüğünü korumak, özellikle IronPDF gibi bir kütüphane kullanarak anında PDF belgeleri oluştururken çok önemlidir. ConcurrentDictionary<tkey, tvalue> sınıfı, verimli anahtar ve değer çiftlerini yönetmek için iş parçacığı güvenli bir koleksiyon sağlar, hatta birden fazla iş parçacığının aynı anda ekleme, güncelleme veya arama gibi işlemler gerçekleştirdiği durumlarda bile.

Bu kılavuzda, ConcurrentDictionary'nin nasıl çalıştığını, IronPDF ile paralel PDF işleme için nasıl entegre edilebileceğini ve .NET geliştiricilerinin her alanda önemli konular olan anahtar türü, iş parçacığı güvenliği ve yaygın tuzaklar gibi mevcut bir anahtarı ele alma veya veri tutarlılığı sağlama hakkında ne bilmesi gerektiğini inceleyeceğiz.

What is a ConcurrentDictionary in C#?

ConcurrentDictionary<tkey, tvalue> sınıfı, System.Collections.Concurrent isim alanının bir parçası olan, yüksek performanslı, iş parçacığı güvenli işlemler için tasarlanmış bir genel koleksiyondur. Normal bir sözlükten farklı olarak, çoklu iş parçacıklarının koleksiyona güvenle erişmesine ve değişiklik yapmasına izin verir, tüm yapıyı kilitlemeden.

ConcurrentDictionary<string, string> yeni bir örneği şöyle görünebilir:

var dictionary = new ConcurrentDictionary<string, string>();

Özel kullanım durumunuza göre kendi TKey ve TValue türlerinizi tanımlayabilirsiniz, örneğin oluşturulmuş PDF dosya yollarını önbelleğe almak veya eşzamanlı PDF üretim görevlerini izlemek gibi.

İronPDF ile ConcurrentDictionary Kullanmanın Avantajları

IronPDF kullanarak binlerce kullanıcı için kişiselleştirilmiş faturalar üreten bir program oluşturduğunuzu hayal edin. Her iş parçacığının bir belge oluşturup sonuçlarını saklaması gerekiyorsa, normal bir sözlük, yarış koşullarını tetikleyebilir veya zaten mevcut bir anahtar olursa istisnalar fırlatabilir.

ConcurrentDictionary kullanmanın garantisini verdiği durumlar:

  • İş parçacıkları arasında veri tutarlılığı
  • Verimli okuma ve yazma işlemleri
  • Bilinmeyen kod hatalarının önlenmesi
  • Farklı anahtarlar üzerinde birden fazla iş parçacığı çalışırken sıfır kilit yükü

Yaygın Yöntemler ve İronPDF ile Kullanımları

IronPDF oluşturma senaryolarını kullanarak temel yöntemleri inceleyelim.

GetOrAdd Yöntemi: Yeni Bir Anahtar Ekle veya Mevcut Bir Anahtarı Al

Bu yöntem, belirli bir anahtarın var olup olmadığını kontrol eder. Yoksa, yeni değeri ekler.

var filePath = pdfCache.GetOrAdd(userId, id => GeneratePdfForUser(id));
  • İş parçacığı güvenliğini sağlar
  • Çift oluşturmayı önler
  • Belirtilen anahtar için ilişkili değeri döndürür

AddOrUpdate Yöntemi: Mevcut Bir Değeri Zarif Bir Şekilde Ele Alan

Bu yöntem, anahtar varsa değeri güncellemenizi veya yeni bir anahtar-değer çifti eklemenizi sağlar.

pdfCache.AddOrUpdate(userId,
    id => GeneratePdfForUser(id),
    (id, existingValue) => UpdatePdfForUser(id, existingValue));
  • Mevcut anahtar için iş mantığını yönetir
  • Üyelerin eşzamanlılık altında güvenli bir şekilde erişilmesini sağlar

TryAdd Yöntemi: Anahtar Yoksa Ekle

Bu yöntem bir değeri eklemeyi dener ve başarıyı belirten bir Boolean değeri döndürür.

bool added = pdfCache.TryAdd(userId, pdfBytes);
if (!added)
{
    Console.WriteLine("PDF already cached.");
}
  • Çatışmaların önlenmesi için mükemmel
  • Ekleme başarılı olursa yöntem true döner

Kullanım Durumu Tablosu: ConcurrentDictionary Yöntemleri

C# Concurrentdictionary (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - Kullanım durumu tablosu

Performans İçin Optimize Etmek

ConcurrentDictionary, yapılandırıcı aracılığıyla ince ayar yapmayı destekler:

int concurrencyLevel = 4;
int initialCapacity = 100;
var dictionary = new ConcurrentDictionary<string, byte[]>(concurrencyLevel, initialCapacity);
  • eşzamanlılık düzeyi: Beklenen iş parçacığı sayısı (varsayılan = varsayılan eşzamanlılık düzeyi)
  • başlangıç kapasitesi: Beklenen öğe sayısı (varsayılan başlangıç kapasitesi)

Bunları düzgün bir şekilde ayarlamak, birden fazla iş parçacığı arasındaki çekişmeyi azaltır ve veri akışını artırır.

Anahtar Çatışmaları ve Varsayılanlarla İlgili Sorunları Önleme

Bir anahtar mevcut değilse, TryGetValue gibi işlemler tür için varsayılan bir değer döndürebilir:

if (!pdfCache.TryGetValue(userId, out var pdf))
{
    pdf = GeneratePdfForUser(userId); // Second call
}

Bu, kodunuzu bilinmeyen kod veya null başvuruları karşısında korur. Bir değer olduğuna inanmadan önce her zaman belirli bir değer olup olmadığını kontrol edin.

Pratik Bir Örnek: İş Parçacığı Güvenli IronPDF Rapor Oluşturucu

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using IronPdf;
public class Program
{
    static ConcurrentDictionary<string, byte[]> pdfReports =
        new ConcurrentDictionary<string, byte[]>();
    static void Main(string[] args)
    {
        // Simulated user list with HTML content
        var users = new List<User>
        {
            new User { Id = "user1", HtmlContent = "<h1>Report for User 1</h1>" },
            new User { Id = "user2", HtmlContent = "<h1>Report for User 2</h1>" },
            new User { Id = "user3", HtmlContent = "<h1>Report for User 3</h1>" }
        };
        // Generate PDFs concurrently
        var renderer = new ChromePdfRenderer();
        Parallel.ForEach(users, user =>
        {
            var pdf = pdfReports.GetOrAdd(user.Id, id =>
            {
                var pdfDoc = renderer.RenderHtmlAsPdf(user.HtmlContent);
                return pdfDoc.BinaryData;
            });
            SaveToFile(pdf, $"{user.Id}.pdf");
        });
        Console.WriteLine("PDF generation complete.");
    }
    // Utility method to write PDF binary data to file
    static void SaveToFile(byte[] pdfBytes, string filePath)
    {
        File.WriteAllBytes(filePath, pdfBytes);
        Console.WriteLine($"Saved: {filePath}");
    }
}
// Simple user class with ID and HTML content
public class User
{
    public string Id { get; set; }
    public string HtmlContent { get; set; }
}

Kaydedilmiş Dosyalar

C# Concurrentdictionary (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - Belirtilen şekilde kaydedilen örnek dosyalar

Örnek Çıktı

C# Concurrentdictionary (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - Örnek PDF belgesi

Kod Çözümlemesi

ConcurrentDictionary<TKey, TValue> ile IronPDF'yi eşzamanlı kullanarak PDF'leri iş parçacığı güvenli bir şekilde oluşturmayı gösteren bu örnek. Birden fazla iş parçacığının aynı anda PDF dosyaları işlediği ve önbelleğe aldığı uygulamalar için mükemmeldir.

Neden ConcurrentDictionary?

  • Anahtar-değer çiftlerine iş parçacığı güvenli erişimi sağlar.

  • GetOrAdd(), çift PDF oluşturulmasını önler.

  • Yüksek eşzamanlılık için manuel kilitler gerekmez. Nasıl Çalışır

  • Kullanıcıların her biri bir ID ve HTML'ye sahiptir.

  • Parallel.ForEach PDF oluşturmak için iş parçacıkları oluşturan paralel bir for döngüsü çalıştırır.

  • Her iş parçacığı ya PDF'yi almak ya da oluşturmak için GetOrAdd() kullanır.

  • PDF, kullanıcının ID'si dosya adı olarak kullanılarak kaydedilir. Özet

Bu model ideal bir kullanım sunar:

  • Aynı anda birçok kullanıcı için PDF oluşturuyorsanız.
  • Performans ve iş parçacığı güvenliğine ihtiyacınız varsa.
  • C# dilinde temiz, güvenilir eşzamanlılık istiyorsanız.

Genişletme Yöntemleri ve Erişim Modelleri

ConcurrentDictionary, tüm LINQ özelliklerini açıklamasa da, değerleri sorgulamak için genişletme yöntemlerini kullanabilirsiniz:

var completedKeys = pdfReports.Keys.Where(k => k.StartsWith("done-")).ToList();

Bununla birlikte, sözlük değişip değişmeyeceğinden, döngü sırasında kopyalanan öğelere güvenmeyin. Gerekirse bir anlık görüntü üzerindeki .ToList() veya .ToArray() işlevlerini kullanın.

Sonuç: İş Parçacığı Güvenliği ile PDF Otomasyonu

ConcurrentDictionary<TKey, TValue>, birden fazla iş parçacığının aynı anda anahtar-değer çiftlerini okuması/yazması gereken senaryolar için idealdir—bu da onu çok iş parçacıklı uygulamalarda IronPDF için mükemmel bir arkadaş yapar.

İster işlenmiş PDF'leri önbelleğe alıyor, ister iş durumu izliyor veya gereksiz işlemleri önlüyor olun, bu iş parçacığı güvenli koleksiyonunu kullanmak, mantığınızın performans ve güvenilirlikle ölçeklenmesini sağlar.

IronPDF'yi Bugün Deneyin

Tam iş parçacığı güvenliği ile yüksek performanslı PDF uygulamaları oluşturmaya hazır mısınız? IronPDF'nin ücretsiz deneme sürümünü indirin ve C#'in ConcurrentDictionary gücü ile birleştirilmiş sorunsuz PDF oluşturma deneyimini yaşayın.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez