当前位置: 首页 > news >正文

C# 快速写入日志 不卡线程 生产者 消费者模式

有这样一种场景需求,就是某个方法,对耗时要求很高,但是又要记录日志到数据库便于分析,由于访问数据库基本都要几十毫秒,可在方法里写入BlockingCollection,由另外的线程写入数据库。
可以看到,在我的机子上面,1ms写入了43条日志。

BlockingCollection<LogModel> logQuenen = new BlockingCollection<LogModel>(1000);private void button2_Click(object sender, EventArgs e){Task.Run(() => {for (int i = 0; i < 100; i++){LogModel logModel = new LogModel();logModel.Log=Guid.NewGuid().ToString();logModel.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");logQuenen.Add(logModel);}});Task.Run(() =>{while (true) {var logModel= logQuenen.Take();string sql = $@"INSERT INTO LogTest
(TextC,TimeC
)
VALUES
('{logModel.Log}' -- TextC - VARCHAR(255),'{logModel.Time}' -- TimeC - TIMESTAMP(3)
);";Function.MySQLHelper.ExecuteNonQuery(sql);}});MessageBox.Show("已点击!!!!!");}public class LogModel{ public string Log { set;get; }public string Time { set;get; }}

在这里插入图片描述

http://www.lryc.cn/news/101094.html

相关文章:

  • Pandas将对角线元素设为1
  • WPF实战学习笔记28-登录界面
  • 01背包
  • 064、故障处理之OMM_TiDB
  • 网络设备中的配置文件管理
  • HCIP BGP综合实验
  • 【mysql学习篇】Order by与Group by优化以及排序算法详解
  • 【业务功能篇60】Springboot + Spring Security 权限管理 【终篇】
  • 文章详情页 - 评论功能的实现
  • 使用贝叶斯滤波器通过运动模型和嘈杂的墙壁传感器定位机器人研究(Matlab代码实现)
  • Day 69-70:矩阵分解
  • 数据结构:树的存储结构
  • Vue前端渲染blob二进制对象图片的方法
  • Java的标记接口(Marker Interface)
  • Kafka基础架构与核心概念
  • 观察者模式与观察者模式实例EventBus
  • 科普 | OSI模型
  • redis相关异常之RedisConnectionExceptionRedisCommandTimeoutException
  • Merge the squares! 2023牛客暑期多校训练营4-H
  • STM32 串口学习(二)
  • 点大商城V2_2.5.0 全开源版 商家自营+多商户入驻 百度+支付宝+QQ+头条+小程序端+unipp开源前端安装测试教程
  • “深入理解SpringBoot:从入门到精通“
  • PCB绘制时踩的坑 - SOT-223封装
  • Go语法入门 + 项目实战
  • QT控件通过qss设置子控件的对齐方式、大小自适应等
  • 基于java在线收银系统设计与实现
  • Linux--进程的新建状态
  • 区间dp,合并石子模板题
  • C++代码格式化工具clang-format详细介绍
  • CentOS 7安装PostgreSQL 15版本数据库