Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 41603|Resposta: 2

[Fonte] .NET/C# implementa logs simples baseados no BlockingCollection

[Copiar link]
Postado em 05-01-2021 às 14:58:50 | | | |
Escrevi uma classe simples de ajuda para logs antes, copiei de outro framework, e o teste não é fácil de usar, da seguinte forma:

C# é a maneira mais fácil de escrever logs
https://www.itsvse.com/thread-5111-1-1.html
Este artigo reimplementa uma classe simples de logging baseada no BlockingCollection.

Coleção de Segurança de Fios .NET/C# (colação)
https://www.itsvse.com/thread-3769-1-1.html
BlockingCollection<T> é uma classe thread-safe collection que oferece a seguinte funcionalidade:

Implemente o modelo maker-user.
Adicione e busque itens simultaneamente via multithreading.
Capacidade máxima opcional.
Quando a coleção está vazia ou cheia, ela é bloqueada por operações de inserção e remoção.
Tentativas de inserção e remoção não bloqueiam nem ocorrem por um período de tempo especificado.
Encapsulamento implementa qualquer tipo de coleção de IProducerConsumerCollection<T>
Use a tag cancelar para executar a ação de cancelamento.
São suportados dois tipos de enums que usam foreach (no Visual Basic, For Each): enums somente leitura. Uma enumeração que remove um item quando um item é enumerado.


A Microsoft apresenta:O login do hiperlink está visível.

BlockingCollection é uma fila de bloqueio segura para threads, usando esse recurso para implementar o modo produtor-consumidor dentro do processo, como encaminhamento de mensagens, registro, etc.

Chame o método Add para adicionar informações à fila, e quando a fila não tem mensagens, o IsCompleted sempre bloqueia o loop while, então não causará um loop morto. Quando uma nova mensagem sair, o IsCompleted in while será acionado e retornará o tipo bool, fazendo a execução continuar, ou seja, buscar dados da thread.


Anteriormente, bloqueamos a thread chamando o método WaitOne do ManualResetEvent, chamando os métodos Reset e Set para passar o sinal, da seguinte forma:

c# encapsula uma fila universal QueueHelper
https://www.itsvse.com/thread-5029-1-1.html


O teste grava 10.000 logs, o que leva menos de 10 milissegundos, como mostrado na figura abaixo:



O código é o seguinte:

Código fonte para download:

Turistas, se quiserem ver o conteúdo oculto deste post, por favorResposta





Anterior:warning: LF will be replaced by CRLF in xxxx.
Próximo:Otimização de Consultas do Entity Framework WITH(NOLOCK)
 Senhorio| Postado em 23-01-2021 11:53:55 |
.NET/C# é baseado na fila de tarefas em segundo plano BlockingCollection
https://www.itsvse.com/thread-9528-1-1.html

Postado em 24-04-2023 22:36:31 |
Excelente e muito bom material de estudo
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com