Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 41603|Risposta: 2

[Fonte] .NET/C# implementa una semplice registrazione basata su BlockingCollection

[Copiato link]
Pubblicato il 5-1-2021 14:58:50 | | | |
Ho scritto una semplice classe di aiuto per il logging prima, copiata da un altro framework, e il test non è facile da usare, come segue:

C# è il modo più semplice per scrivere log
https://www.itsvse.com/thread-5111-1-1.html
Questo articolo reimplementa una semplice classe di logging basata su BlockingCollection.

Collezione di sicurezza filettatura .NET/C# (collazione)
https://www.itsvse.com/thread-3769-1-1.html
BlockingCollection<T> è una classe thread-safe collection che offre la seguente funzionalità:

Implementa il modello maker-utente.
Aggiungi e recupera oggetti contemporaneamente tramite multithreading.
Capacità massima opzionale.
Quando la collezione è vuota o piena, viene bloccata dalle operazioni di inserimento e rimozione.
I tentativi di inserimento e rimozione non bloccano o si verificano per un periodo di tempo specificato.
L'incapsulamento implementa qualsiasi tipo di collezione di IProducerConsumerCollection<T>
Usa il tag cancel per eseguire l'azione di cancellazione.
Sono supportati due tipi di enum che usano foreach (in Visual Basic, For Each): enum di sola lettura. Un'enumerazione che rimuove un elemento quando un elemento viene elencato.


Microsoft presenta:Il login del link ipertestuale è visibile.

BlockingCollection è una coda di blocco thread-safe, che utilizza questa funzione per implementare la modalità produttore-consumatore all'interno del processo, come l'inoltro dei messaggi, il log, ecc.

Chiama il suo metodo Add per aggiungere informazioni alla coda, e quando la coda non ha messaggi, IsCompleted bloccherà sempre il ciclo while, quindi non causerà un dead loop. Quando esce un nuovo messaggio, viene attivato l'IsCompleted in while che restituisce il tipo bool, facendo continuare l'esecuzione, cioè il recupero dei dati dal thread.


In precedenza, bloccavamo il thread chiamando il metodo WaitOne di ManualResetEvent, chiamando i metodi Reset e Set per far passare il segnale, come segue:

c# racchiude una coda universale QueueHelper
https://www.itsvse.com/thread-5029-1-1.html


Il test scrive 10.000 log, che richiede meno di 10 millisecondi, come mostrato nella figura sottostante:



Il codice è il seguente:

Scarica codice sorgente:

Turisti, se volete vedere il contenuto nascosto di questo post, vi pregoRisposta





Precedente:warning: LF will be replaced by CRLF in xxxx.
Prossimo:Ottimizzazione delle query del Entity Framework WITH(NOLOCK)
 Padrone di casa| Pubblicato il 23-01-2021 11:53:55 |
.NET/C# si basa sulla coda di task in background BlockingCollection
https://www.itsvse.com/thread-9528-1-1.html

Pubblicato il 24-04-2023 22:36:31 |
Ottimo materiale di studio
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com