.NET Framework 1.0'da tanıtılan koleksiyonlar System.Collections isim alanında bulunabilir. Bu koleksiyonlar, yaygın kullanılan ArrayList ve Hashtable dahil, Synchronized özelliği aracılığıyla bir tür iş parçacığı güvenliği sağlar; bu özellik, koleksiyonla ilgili iş parçacığı güvenli bir wrapper döndürür. Wrapper, her ekleme veya çıkarma işlemi için tüm seti kilitleyerek çalışır. Bu nedenle, koleksiyona erişmeye çalışan her iş parçacığı, kilidi alma sırası gelene kadar beklemek zorundadır. Bu ölçeklenebilir değildir ve büyük koleksiyonlar için önemli bir performans düşüşüne yol açar. Ayrıca, bu tasarım tartışmayı tamamen engellemez. Daha fazla bilgi için MSDN web sitesindeki aşağıdaki sayfaya bakınız: Genel Koleksiyonlarda Senkronizasyon
.NET Framework 2.0'da tanıtılan koleksiyon sınıfı, System.Collections.Generic isim alanında bulunabilir. Bu koleksiyon sınıfları arasında List<T>, Sözlük< TKey, TValue> vb. bulunur. Bu sınıflar, .NET Framework 1.0 sınıflarına kıyasla daha yüksek tür güvenliği ve performansı sağlar. Ancak, .NET Framework 2.0 koleksiyon sınıfı herhangi bir iş parçacığı senkronizasyonu sağlamaz; Aynı anda birden fazla iş parçacığına öğe ekleyip çıkarıldığında, kullanıcı kodu tüm senkronizasyonu sağlamalıdır.
.NET Framework 4'te eşzamanlı koleksiyon sınıflarını kullanmanızı öneririz çünkü bunlar sadece .NET Framework 2.0 koleksiyon sınıflarının tür güvenliğini değil, aynı zamanda .NET Framework 1.0 koleksiyonunun sunduğu iş parçacığı güvenliğinden daha verimli ve eksiksiz iş parçacığı güvenliği sağlar.
Bazı eşzamanlı koleksiyon türleri, .NET Framework 4'te yeni olan SpinLock, SpinWait, SemaphoreSlim ve CountdownEvent gibi hafif senkronizasyon mekanizmalarını kullanır. Genellikle, yukarıdaki senkronizasyon tipleri iş parçacığını gerçek bekleme durumuna koymadan önce kısa bir süre için "yoğun dönme" kullanır. Bekleme süresinin çok kısa olması bekleniyorsa, spin beklemeye göre çok daha az hesaplama kaynağı tüketir; bekleyiş ise çekirdek dönüşümleri çok fazla kaynak tüketir. Rotasyon kullanan koleksiyon sınıfları için bu verimlilik, birden fazla iş parçacığının çok hızlı bir şekilde eşya ekleyip çıkarabilmesini sağlar. Sınırlama ve engelleme hakkında daha fazla bilgi için SpinLock ve SpinWait'e bakınız. ConcurrentQueue<T> ve ConcurrentStack<T> sınıfları hiç kilitler kullanmaz. Bunun yerine, iplik güvenliği için Kilitli işlemlere dayanırlar.
Göstermek
Eşzamanlı koleksiyon sınıfları ICollection'u desteklediği için, IsSynchronized ve SyncRoot özellikleri için uygulamalar sağlarlar, bunlar ilişkisiz olsa bile. IsSynchronized her zaman false dönerken, SyncRoot her zaman null (Visual Basic'te Nothing Nothing olur).
Aşağıdaki tablo, System.Collections.Concurrent ismspace'deki koleksiyon türlerini listeler.
tür | Açıklama | BlockingCollection<T> | <T> IProducerConsumerCollection'ı uygulamak için her türlü throttling ve engelleme sağlar. Daha fazla bilgi için BlockingCollection genel bakışına bakınız. | ConcurrentDictionary<TKey, TValue> | Anahtar/değer, sözlüğün iş başlığı güvenli uygulamasıdır. | ConcurrentQueue<T> | FIFO (ilk giren, ilk çıkan) kuyruklarının iş parçacığı güvenliği uygulaması. | ConcurrentStack<T> | LIFO (last-in, first-out) yığınlarının iş parçacığı güvenli uygulaması. | ConcurrentBag<T> | Sırasız bir eleman koleksiyonunun iş başlığı güvenli uygulaması. | IProducerConsumerCollection<T> | Türler şu şekilde uygulanmalıdırBlockingCollectionKullanılan arayüzler
|
|