Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 41603|Antwoord: 2

[Bron] .NET/C# implementeert eenvoudige logging gebaseerd op BlockingCollection

[Link kopiëren]
Geplaatst op 5-1-2021 14:58:50 | | | |
Ik heb eerder een eenvoudige loging-helpcursus geschreven, gekopieerd van een ander framework, en de test is niet eenvoudig te gebruiken, als volgt:

C# is de makkelijkste manier om logs te schrijven
https://www.itsvse.com/thread-5111-1-1.html
Dit artikel implementeert opnieuw een eenvoudige loggingklasse gebaseerd op BlockingCollection.

.NET/C# Thread Safety Collection (collatie)
https://www.itsvse.com/thread-3769-1-1.html
BlockingCollection<T> is een thread-safe collection-klasse die de volgende functionaliteit biedt:

Implementeer het maker-user model.
Voeg items toe en haal ze gelijktijdig op via multithreading.
Optionele maximale capaciteit.
Wanneer de collectie leeg of vol is, wordt deze geblokkeerd door insert- en verwijderingsoperaties.
Pogingen om in te voegen en te verwijderen blokkeren of vinden niet plaats gedurende een bepaalde periode.
Encapsulation implementeert elk verzamelingstype van IProducerConsumerCollection<T>
Gebruik de annuleertag om de annuleringsactie uit te voeren.
Er worden twee soorten enums ondersteund die foreach gebruiken (in Visual Basic, For Each): alleen-lezen enums. Een opsomming die een item verwijdert wanneer een item wordt opgesomd.


Microsoft introduceert:De hyperlink-login is zichtbaar.

BlockingCollection is een thread-veilige blokkeerwachtrij, die deze functie gebruikt om de producer-consumer-modus binnen het proces te implementeren, zoals berichtdoorstuur, logging, enzovoort.

Roep de Add-methode aan om informatie aan de wachtrij toe te voegen, en wanneer de wachtrij geen berichten bevat, blokkeert IsCompleted altijd de while-lus, zodat er geen dead loop ontstaat. Wanneer er een nieuw bericht binnenkomt, wordt de IsCompleted-in getriggerd en geeft het type bool terug, waardoor de uitvoering doorgaat, dat wil zeggen, data uit de thread wordt opgehaald.


Eerder blokkeerden we de thread door de WaitOne-methode van ManualResetEvent aan te roepen, waarbij de Reset en Set methoden werden aangeroepen om het signaal door te geven, als volgt:

c# encapsuleert een universele QueueHelper-wachtrij
https://www.itsvse.com/thread-5029-1-1.html


De test schrijft 10.000 logs, wat minder dan 10 milliseconden duurt, zoals getoond in de onderstaande figuur:



De code is als volgt:

Broncode downloaden:

Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieftAntwoord





Vorig:warning: LF will be replaced by CRLF in xxxx.
Volgend:Entity Framework Query-optimalisatie WITH(NOLOCK)
 Huisbaas| Geplaatst op 23-1-2021 11:53:55 |
.NET/C# is gebaseerd op de BlockingCollection achtergrondtaakwachtrij
https://www.itsvse.com/thread-9528-1-1.html

Geplaatst op 24-4-2023 22:36:31 |
Uitstekend, zeer goed studiemateriaal
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com