Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 41603|Antwort: 2

[Quelle] .NET/C# implementiert einfaches Logging basierend auf BlockingCollection

[Link kopieren]
Veröffentlicht am 05.01.2021, 14:58:50 | | | |
Ich habe zuvor eine einfache Loging-Hilfeklasse geschrieben, die ich von einem anderen Framework kopiert habe, und der Test ist nicht einfach zu bedienen, wie folgt:

C# ist der einfachste Weg, Logs zu schreiben
https://www.itsvse.com/thread-5111-1-1.html
Dieser Artikel implementiert eine einfache Logging-Klasse auf Basis von BlockingCollection neu.

.NET/C# Thread Safety Collection (Zusammenstellung)
https://www.itsvse.com/thread-3769-1-1.html
BlockingCollection<T> ist eine threadsichere Sammlungsklasse, die folgende Funktionalität bietet:

Implementiere das Maker-User-Modell.
Fügen Sie Items gleichzeitig durch Multithreading hinzu und holen sie ab.
Optionale maximale Kapazität.
Wenn die Sammlung leer oder voll ist, wird sie durch Ein- und Entfernen-Operationen blockiert.
Ein- und Entfernungsversuche blockieren oder finden nicht für einen bestimmten Zeitraum statt.
Encapsulation implementiert jeden Collection-Typ von IProducerConsumerCollection<T>
Verwenden Sie das Abbruch-Tag, um die Abbruchaktion auszuführen.
Zwei Arten von Enums, die foreach verwenden (in Visual Basic, For Each), werden unterstützt: Nur-Lese-Enums. Eine Aufzählung, die einen Punkt entfernt, wenn ein Punkt aufgezählt wird.


Microsoft stellt vor:Der Hyperlink-Login ist sichtbar.

BlockingCollection ist eine threadsichere Blockwarteschlange, die diese Funktion nutzt, um den Producer-Consumer-Modus im Prozess zu implementieren, wie zum Beispiel Nachrichtenweiterleitung, Logging usw.

Ruft die Add-Methode auf, um Informationen zur Warteschlange hinzuzufügen, und wenn die Warteschlange keine Nachrichten enthält, blockiert IsCompleted immer die while-Schleife, sodass keine Deadloop entsteht. Wenn eine neue Nachricht erscheint, wird das IsCompleted-in-while ausgelöst und gibt den Bool-Typ zurück, wodurch die Ausführung fortgesetzt wird, also Daten aus dem Thread abgerufen werden.


Zuvor haben wir den Thread blockiert, indem wir die WaitOne-Methode von ManualResetEvent aufgerufen und die Reset- und Set-Methoden aufgerufen haben, um das Signal weiterzugeben, wie folgt:

c# kapselt eine universelle QueueHelper-Warteschlange
https://www.itsvse.com/thread-5029-1-1.html


Der Test schreibt 10.000 Logs, was weniger als 10 Millisekunden benötigt, wie in der untenstehenden Abbildung dargestellt:



Der Code lautet wie folgt:

Quellcode-Download:

Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitteAntwort





Vorhergehend:warning: LF will be replaced by CRLF in xxxx.
Nächster:Entitätsrahmen-Abfrageoptimierung WITH(NOLOCK)
 Vermieter| Veröffentlicht am 23.1.2021, 11:53:55 |
.NET/C# basiert auf der BlockingCollection-Hintergrund-Task-Warteschlange
https://www.itsvse.com/thread-9528-1-1.html

Veröffentlicht am 24.04.2023, 22:36:31 |
Ausgezeichnet, sehr gutes Lernmaterial
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com