Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 41603|Odpowiedź: 2

[Źródło] .NET/C# implementuje proste logowanie oparte na BlockingCollection

[Skopiuj link]
Opublikowano 5 lutego 2021-1-14:50 | | | |
Wcześniej napisałem prostą klasę pomocy logowania, skopiowaną z innego frameworka, i test nie jest łatwy w obsłudze, jak następuje:

C# to najprostszy sposób na zapisywanie logów
https://www.itsvse.com/thread-5111-1-1.html
Ten artykuł ponownie implementuje prostą klasę logowania opartą na BlockingCollection.

.NET/C# Zbiory Bezpieczeństwa Wątków (kolacja)
https://www.itsvse.com/thread-3769-1-1.html
BlockingCollection<T> to klasa kolekcji bezpieczna dla wątków, która oferuje następującą funkcjonalność:

Wdroż model maker-user.
Dodawanie i pobieranie elementów jednocześnie przez wielowątkowanie.
Opcjonalna maksymalna pojemność.
Gdy kolekcja jest pusta lub pełna, jest blokowana przez operacje wstawiania i usuwania.
Próby wstawiania i usuwania nie blokują ani nie występują przez określony czas.
Encapsulation implementuje dowolny typ kolekcji IProducerConsumerCollection<T>
Użyj tagu cancel, aby wykonać akcję cancelowania.
Obsługiwane są dwa typy enumów wykorzystujących foreach (w Visual Basic, For Each): enumy tylko do odczytu. Enumeracja, która usuwa element po jego wyliczeniu.


Microsoft przedstawia:Logowanie do linku jest widoczne.

BlockingCollection to bezpieczna kolejka blokująca wątków, wykorzystująca tę funkcję do implementacji trybu producer-consumer w procesie, takiej jak przekazywanie wiadomości, logowanie itp.

Używaj metody Add do dodawania informacji do kolejki, a gdy kolejka nie zawiera żadnych komunikatów, IsCompleted zawsze zablokuje pętlę while, więc nie powoduje martwej pętli. Gdy pojawi się nowa wiadomość, wywołane zostanie IsCompleted in while i zwróci typ bool, co powoduje kontynuację wykonywania, czyli pobieranie danych z wątku.


Wcześniej blokowaliśmy wątek, wywołując metodę WaitOne w ManualResetEvent, wywołując metody Reset i Set w celu przekazania sygnału, w następujący sposób:

c# enkapsuluje uniwersalną kolejkę QueueHelper
https://www.itsvse.com/thread-5029-1-1.html


Test zapisuje 10 000 logów, co zajmuje mniej niż 10 milisekund, jak pokazano na poniższym rysunku:



Kod jest następujący:

Pobranie kodu źródłowego:

Turyści, jeśli chcecie zobaczyć ukrytą zawartość tego wpisu, proszęOdpowiedź





Poprzedni:warning: LF will be replaced by CRLF in xxxx.
Następny:Optymalizacja zapytań w ramach Entity Framework WITH(NOLOCK)
 Ziemianin| Opublikowano 2021-1-23 11:53:55 |
.NET/C# opiera się na kolejce zadań w tle BlockingCollection
https://www.itsvse.com/thread-9528-1-1.html

Opublikowano 2023-4-24 22:36:31 |
Doskonałe, bardzo dobre materiały do nauki
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com