Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 69126|Jawab: 4

[Sumber] Koleksi Keamanan Benang .NET/C# (kolasi)

[Salin tautan]
Diposting pada 06/06/2017 17.13.53 | | |
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







Mantan:.net/c# itextsharp untuk menghasilkan kode PDF
Depan:Install-Package: "MvvmLightLibs" sudah memiliki dependensi yang ditentukan untuk "CommonServiceLocator"...
Diposting pada 08/11/2017 15.24.45 |
Ya, saya belajar
 Tuan tanah| Diposting pada 08/02/2021 10.00.41 |
Daftar<T> aman untuk utas jika daftar tidak dimodifikasi sama sekali selama iterasi.
 Tuan tanah| Diposting pada 23/03/2021 11.32.46 |
ConcurrentDictionary mendukung pembaruan baru dan yang diperbarui
https://www.itsvse.com/thread-2955-1-1.html

 Tuan tanah| Diposting pada 24/06/2023 14.20.57 |
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com