Saya menulis kelas bantuan pencatatan sederhana sebelumnya, disalin dari kerangka kerja lain, dan pengujiannya tidak mudah digunakan, sebagai berikut:
Artikel ini mengimplementasikan ulang kelas pengelogan sederhana berdasarkan BlockingCollection.
BlockingCollection<T> adalah kelas koleksi aman utas yang menyediakan fungsionalitas berikut:
Terapkan model pembuat-pengguna. Tambahkan dan ambil item secara bersamaan melalui multithreading. Kapasitas maksimum opsional. Ketika koleksi kosong atau penuh, itu diblokir oleh operasi memasukkan dan melepas. Upaya sisipan dan hapus tidak memblokir atau terjadi untuk jangka waktu tertentu. Enkapsulasi mengimplementasikan semua jenis koleksi IProducerConsumerCollection<T> Gunakan tag batal untuk melakukan tindakan pembatalan. Dua jenis enum yang menggunakan foreach (di Visual Basic, For Each) didukung: enum baca-saja. Pencacahan yang menghapus item saat item dihitung.
Microsoft memperkenalkan:Login hyperlink terlihat.
BlockingCollection adalah antrean pemblokiran yang aman untuk utas, menggunakan fitur ini untuk mengimplementasikan mode produsen-konsumen dalam proses, seperti penerusan pesan, pengelogan, dll.
Panggil metode Add untuk menambahkan informasi ke antrean, dan ketika antrean tidak memiliki pesan, IsCompleted akan selalu memblokir perulangan while, sehingga tidak akan menyebabkan perulangan mati. Ketika pesan baru keluar, IsCompleted di while akan dipicu dan mengembalikan jenis bool, menyebabkan eksekusi berlanjut, yaitu mengambil data dari utas.
Sebelumnya, kami memblokir utas dengan memanggil metode WaitOne dari ManualResetEvent, memanggil metode Reset dan Set untuk meneruskan sinyal, sebagai berikut:
Pengujian menulis 10.000 log, yang membutuhkan waktu kurang dari 10 milidetik, seperti yang ditunjukkan pada gambar di bawah ini:
Kodenya adalah sebagai berikut:
Unduhan kode sumber:
Wisatawan, jika Anda ingin melihat konten tersembunyi dari posting ini, silakan Jawab
|