架构师_程序员_码农网

Имя пользователя Получить пароль
Регистрация

QQ登录

Всего один шаг, чтобы начать

Поиск
Просмотр:23222|Ответ: 2
打印 上一主题 下一主题

[NET/C# простой логгинг на основе BlockingCollection

[Скопировать ссылку] .
Поднимайте прямо к 跳转到指定楼层
владелец
发表于 2021-1-5 14:58:50|只看该作者回帖奖励|Реверсивныйпросмотр|Режим чтения
Я уже писал простой класс-помощник для ведения журнала, скопированный из другого фреймворка, и тест не работает, как показано ниже:

c# Простейший способ записи логов
h ttps:// www.itsvse.com/thread-5111-1-1.html
Эта статья основана на повторной реализации класса простого журнала записи BlockingCollection.

Потокобезопасная коллекция (collation) в .net/c#
h ttps:// www.itsvse.com/thread-3769-1-1.html
BlockingCollection<T> - это класс потокобезопасной коллекции, который обеспечивает следующую функциональность:

Реализация паттерна "создатель-пользователь".
Добавление и получение элементов одновременно в нескольких потоках.
Необязательная максимальная емкость.
Блокировка операций вставки и удаления, когда коллекция пуста или переполнена.
Операции вставки и удаления "try" без блокировки или в течение определенного периода времени.
Обертывает любой тип коллекции, реализующий IProducerConsumerCollection<T>.
Выполняет операции отмены с помощью флага cancel.
Поддерживает два типа перечислений с помощью foreach (в Visual Basic - For Each): перечисления только для чтения. Перечисления, которые удаляют элементы при их перечислении.


Введение Microsoft: https: //docs.microsoft.com/zh-cn/dotnet/standard/collections/thread-safe/blockingcollection-overview

BlockingCollection - это потокобезопасная блокирующая очередь. Используя функцию блокировки, мы можем реализовать внутрипроцессную модель производитель-потребитель, например пересылку сообщений, ведение журнала и т. д. Вызовите метод Add, чтобы добавить сообщение в очередь.

Когда в очереди нет сообщений, IsCompleted будет продолжать блокировать цикл while, чтобы не привести к мертвому циклу. Когда появится новое сообщение, IsCompleted внутри while сработает и вернет тип bool, что приведет к продолжению выполнения, т. е. получению данных внутри потока.


Ранее мы заблокировали поток, вызвав метод WaitOne события ManualResetEvent, и вызвали методы Reset и Set для передачи сигнала, как показано ниже:

c# обертывает универсальную очередь QueueHelper
h ttps:// www.itsvse.com/thread-5029-1-1.html


Тест на запись 10 000 журналов занял менее 10 миллисекунд, как показано ниже:



Код выглядит следующим образом:

Скачать исходный код:

Гость, если вы хотите просмотреть скрытое содержимое этого сообщения, пожалуйста, ответьте на





Предыдущая: предупреждение: LF будет заменен на CRLF в xxxx.
Следующая:Оптимизация запросов в Entity Framework WITH(NOLOCK)
NET/C# Использование SemaphoreSlim для ограничения методов одновременного выполнения.
Я не уверен, что смогу это сделать.
владелец|发表于 2021-1-23 11:53:55|只看该作者
NET/C# Внутренняя очередь задач на основе BlockingCollection
h ttps:// www.itsvse.com/thread-9528-1-1.html

NET, публикуется только в процессе практики, возникли технические трудности, не вводите в заблуждение других.
Ответить ЗаПротив

Отчет

Скамейки
发表于 2023-4-24 22:36:31|只看该作者
Очень хорошо, очень хороший учебный материал
Я не уверен, что у меня получится, но уверен, что у меня получится, и я уверен, что у меня получится.
Вы должны войти в систему, прежде чем сможете отправлять сообщения назад Войти | Зарегистрироваться

Эта версия интегральных правил


Отказ от ответственности: Все программное обеспечение, программные материалы или статьи, выпущенные код фермер сети ограничивается для изучения и исследования целей; вышеупомянутое содержание не должно быть использовано для коммерческих или незаконных целей, в противном случае, все последствия, пожалуйста, пользователь несет ответственность. Это сайт информации из сети, авторские права спор не имеет никакого отношения к этому сайту. Вы должны полностью удалить вышеуказанное содержимое с вашего компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купить регистрацию и получить лучше подлинного обслуживания. Если есть какие-либо нарушения, пожалуйста, свяжитесь с нами по электронной почте, чтобы разобраться с этим.

Почта To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-19 00:17

Быстрый ответНазад к началуНазад к списку