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; }
        }
相关推荐
PingCAP5 分钟前
从 DB-Engines 排名攀升看 TiDB 全球突破之路
数据库·人工智能·tidb
消失在人海中1 小时前
oracle 游标的管理
数据库·oracle
盖世英雄酱581361 小时前
小小的改动,竟然效率提高了1000倍
数据库·后端
八股文领域大手子1 小时前
从接口400ms到20ms,记录一次JVM、MySQL、Redis的混合双打
jvm·数据库·redis·mysql·jar
浩浩测试一下1 小时前
网络安全中信息收集需要收集哪些信息了?汇总
安全·web安全·网络安全·oracle·sqlite·系统安全·可信计算技术
leslie_xin2 小时前
(原创)[开源][.Net Framework 4.5] SimpleMVVM(极简MVVM框架)更新 v1.1,增加NuGet包
c#·wpf
提高记忆力2 小时前
truncate,drop,delete分析
数据库
江节胜-胜行全栈AI2 小时前
PostgreSQL-中文字段排序-修改字段的排序规则
数据库·postgresql
就是蠢啊2 小时前
SpringBoot 基础知识,HTTP 概述
数据库·mysql·spring