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; }
        }
相关推荐
yoi啃码磕了牙5 分钟前
Unity—Localization 多语言
java·数据库·mysql
一颗宁檬不酸18 分钟前
PL/SQL 知识点总结
数据库·sql·oracle·知识点
serve the people1 小时前
Prompt Serialization in LangChain
数据库·langchain·prompt
万事大吉CC1 小时前
Win11卸载重装oracle 11g数据库
数据库
时光追逐者2 小时前
【拾遗补漏】.NET 常见术语集
微软·c#·.net
数据库那些事儿2 小时前
DMS Airflow:企业级数据工作流编排平台的专业实践
数据库
一 乐2 小时前
流浪动物救助|流浪猫狗救助|基于Springboot+vue的流浪猫狗救助平台设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设
好记忆不如烂笔头abc2 小时前
Configuration of TCP/IP with SSL and TLS for Database Connections
数据库·网络协议·ssl
安全系统学习3 小时前
自学网络安全学习的误区和陷阱
数据库·学习·安全·web安全·网络安全·安全架构
秋雨雁南飞3 小时前
c# 使用Memory实现Redis入队出队功能
redis·c#