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; }
        }
相关推荐
杨运交10 分钟前
[079][消息模块]基于 Redis Stream 的高可靠消息队列实现——Spring Data Redis 实战解析
数据库·redis·spring
Leo.yuan26 分钟前
2026穿透式监管系统选型避坑:数据接不进、风险穿不透、系统难联动,哪些平台能解决?
大数据·数据库
数据库小学妹27 分钟前
MySQL内存占用过高怎么排查?分层定位与OOM根因
数据库·经验分享·mysql·内存·oom
刘胡子大叔40 分钟前
旧 SQL 在新 PG 上能不能跑
数据库·sql
Elastic 中国社区官方博客1 小时前
教程:监控 Java 应用
java·开发语言·数据库·elasticsearch·搜索引擎·全文检索
xixingzhe21 小时前
秒杀库存三种缓存实现方案
数据库·redis·缓存
软件交付观察室1 小时前
数据大屏总数与明细为什么对不上?2026项目开发排查指南
软件测试·数据库·sql·sqlite·数据可视化
倔强的石头_1 小时前
数据集成软件怎么选 研究了一圈,我盯上了金仓KFS
数据库