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

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

可以看到,在我的机子上面,1ms写入了43条日志。

csharp 复制代码
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; }
        }
相关推荐
先吃饱再说1 小时前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库
Nturmoils1 小时前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
Databend3 小时前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
这个DBA有点耶4 小时前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构
smallyoung5 小时前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql
parade岁月5 小时前
MySQL JOIN解析:朴实无华但食之有味
数据库·后端
用户3169353811835 小时前
MySQL服务无法启动问题解决全记录
数据库
vivo互联网技术9 小时前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
倔强的石头_1 天前
《Kingbase护城河》——猎捕慢查询:执行计划的微观解析与索引调优实战
数据库
SelectDB1 天前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python