Koleksi yang diperkenalkan dalam .NET Framework 1.0 dapat ditemukan di namespace System.Collections. Koleksi ini, termasuk ArrayList dan Hashtable yang umum digunakan, memberikan semacam keamanan utas melalui properti Synchronized, yang mengembalikan pembungkus aman utas yang terkait dengan koleksi. Pembungkus bekerja dengan mengunci seluruh set untuk setiap operasi tambah atau hapus. Oleh karena itu, setiap utas yang mencoba mengakses koleksi harus menunggu sampai gilirannya untuk mendapatkan kunci. Ini tidak dapat diskalakan dan akan mengakibatkan penurunan kinerja yang signifikan untuk koleksi besar. Selain itu, desain ini tidak sepenuhnya mencegah perselisihan. Untuk informasi selengkapnya, lihat halaman berikut di situs web MSDN: Sinkronisasi dalam Koleksi Generik
Kelas koleksi yang diperkenalkan dalam .NET Framework 2.0 dapat ditemukan di namespace System.Collections.Generic. Kelas koleksi ini termasuk Daftar<T>, Kamus< TKey, TValue> dll. Kelas-kelas ini memberikan keamanan dan performa jenis yang lebih tinggi dibandingkan dengan kelas .NET Framework 1.0. Namun, kelas koleksi .NET Framework 2.0 tidak menyediakan sinkronisasi utas apa pun; Saat menambahkan atau menghapus item pada beberapa utas secara bersamaan, kode pengguna harus menyediakan semua sinkronisasi.
Sebaiknya gunakan kelas koleksi bersamaan di .NET Framework 4 karena mereka tidak hanya menyediakan keamanan jenis kelas koleksi .NET Framework 2.0, tetapi juga keamanan utas yang lebih efisien dan lengkap daripada keamanan utas yang disediakan oleh koleksi .NET Framework 1.0.
Beberapa jenis koleksi bersamaan menggunakan mekanisme sinkronisasi ringan seperti SpinLock, SpinWait, SemaphoreSlim, dan CountdownEvent, yang baru di .NET Framework 4. Biasanya, jenis sinkronisasi di atas menggunakan "busy spinning" untuk waktu yang singkat sebelum menempatkan thread ke status tunggu yang sebenarnya. Jika waktu tunggu diperkirakan sangat singkat, putaran akan menghabiskan sumber daya komputasi yang jauh lebih sedikit daripada menunggu, yang melibatkan konversi kernel yang akan menghabiskan banyak sumber daya. Untuk kelas koleksi yang menggunakan rotasi, efisiensi ini berarti bahwa beberapa utas dapat menambahkan dan menghapus item dengan kecepatan yang sangat cepat. Untuk informasi selengkapnya tentang membatasi dan memblokir, lihat SpinLock dan SpinWait. Kelas ConcurrentQueue<T> dan ConcurrentStack<T> tidak menggunakan kunci sama sekali. Sebaliknya, mereka mengandalkan operasi Interlocked untuk keamanan ulir.
Menggambarkan
Karena kelas koleksi bersamaan mendukung ICollection, mereka menyediakan implementasi untuk properti IsSynchronized dan SyncRoot, meskipun tidak terkait. IsSynchronized selalu mengembalikan false, sedangkan SyncRoot selalu null (Tidak ada di Visual Basic).
Tabel berikut mencantumkan jenis koleksi di namespace System.Collections.Concurrent.
jenis | deskripsi | PemblokiranKoleksi<T> | Menyediakan<T> semua jenis pembatasan dan pemblokiran untuk mengimplementasikan IProducerConsumerCollection. Untuk informasi selengkapnya, lihat Gambaran umum BlockingCollection. | Kamus Concurrent<TKey, TValue> | Kunci/nilai adalah implementasi kamus yang aman untuk utas. | Antrean <T>Bersamaan | Implementasi keamanan utas dari antrean FIFO (pertama masuk, pertama keluar). | Tumpukan Bersamaan<T> | Implementasi tumpukan LIFO (last-in, first-out) yang aman untuk utas. | Kantong Bersamaan<T> | Implementasi thread yang aman dari kumpulan elemen yang tidak berurutan. | IProducerKoleksi Konsumen<T> | jenis harus diterapkan diPemblokiranKoleksiantarmuka yang digunakan dalam
|
|