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; }
        }
相关推荐
洋不写bug2 分钟前
二叉树(四)经典算法题目解析,公共祖先,二叉树构造,非递归遍历
数据库·算法·二叉树·二叉树构造·公共祖先
凯子坚持 c2 分钟前
如何在教育平台中嵌入在线文档编辑组件:ONLYOFFICE Docs从部署到功能全验证
数据库·onlyoffice
SelectDB6 分钟前
Apache Doris 选型实操:4 个维度 Checklist 与验证要点
大数据·数据库·掘金技术征文
SelectDB10 分钟前
Apache Doris 高并发点查与实时写入笔记:一套引擎统一实时数仓与在线服务
大数据·数据库·数据分析
李白客10 分钟前
时序数据库入门:什么是 TSDB?时序库与关系型数据库对比、主流产品选型指南(2026)
数据库·oracle·时序数据库
SelectDB11 分钟前
Apache Doris 存算分离实操:从对象存储接入到多计算集群配置(附 SQL)
大数据·数据库·数据分析
SelectDB20 分钟前
Apache Doris 多表 Join 优化实战:从 CBO 到 Colocate Join 配置(附 SQL)
大数据·数据库·数据分析
tachibana233 分钟前
什么是 Function Calling ?
数据库·人工智能·ai·llm·agent
全栈弄潮儿²⁰²⁴33 分钟前
AI Agent 开发实战(7):如何接入搜索和数据库工具?
数据库·人工智能·ai·chatgpt·oracle·agent·ai编程
砚底藏山河40 分钟前
并发与限频工程:把20只的2秒压到0.5秒不封号(魔码量化实战 #03)
java·开发语言·数据库·python·金融