Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 41603|Відповідь: 2

[Джерело] .NET/C# реалізує просте логування на основі BlockingCollection

[Копіювати посилання]
Опубліковано 2021-1-5 14:58:50 | | | |
Раніше я писав простий курс з логування, скопіюваний з іншого фреймворку, і тест непростий у використанні, а отже:

C# — найпростіший спосіб писати журнали
https://www.itsvse.com/thread-5111-1-1.html
Ця стаття повторно реалізує простий клас логування на базі BlockingCollection.

Колекція безпеки потоку .NET/C# (збірка)
https://www.itsvse.com/thread-3769-1-1.html
<T> BlockingCollection — це клас колекції, безпечний для потоків, який забезпечує таку функціональність:

Впровадьте модель maker-user.
Додавайте та забирайте предмети одночасно через багатопотокову роботу.
Опціональна максимальна місткість.
Коли колекція порожня або заповнена, її блокують операціями вставки та видалення.
Спроби вставки та видалення не блокуються і не відбуваються протягом визначеного часу.
Інкапсуляція реалізує будь-який тип колекції IProducerConsumerCollection<T>
Використовуйте тег скасування для виконання дії скасування.
Підтримуються два типи enums, які використовують foreach (у Visual Basic, For Each): enums лише для читання. Перерахування, яке видаляє елемент під час його перерахування.


Microsoft представляє:Вхід за гіперпосиланням видно.

BlockingCollection — це черга блокування, безпечна для потоків, яка використовує цю функцію для реалізації режиму виробник-споживач у процесі, такого як пересилання повідомлень, ведення журналу тощо.

Викликайте його метод додавання, щоб додати інформацію до черги, і коли в черзі немає повідомлень, IsCompleted завжди блокуватиме цикл while, тож не спричинить мертвий цикл. Коли з'являється нове повідомлення, активується IsCompleted in while і повертає тип bool, що призводить до продовження виконання, тобто отримання даних із потоку.


Раніше ми блокували потік, викликаючи метод WaitOne ManualResetEvent, викликаючи методи Reset і Set для передачі сигналу, наступним чином:

c# інкапсулює універсальну чергу QueueHelper
https://www.itsvse.com/thread-5029-1-1.html


Тест записує 10 000 журналів, що займає менше 10 мілісекунд, як показано на рисунку нижче:



Код виглядає так:

Завантаження вихідного коду:

Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласкаВідповідь





Попередній:warning: LF will be replaced by CRLF in xxxx.
Наступний:Оптимізація запитів до фреймворку сутностей WITH(NOLOCK)
 Орендодавець| Опубліковано 2021-1-23 11:53:55 |
.NET/C# базується на фоновій черзі завдань BlockingCollection
https://www.itsvse.com/thread-9528-1-1.html

Опубліковано 2023-4-24 22:36:31 |
Відмінний, дуже хороший навчальний матеріал
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com