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

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

        public static BlockingCollection<LogModel> logQueue = new BlockingCollection<LogModel>(3000);

        public static void QuickLog(string log)
        {
    
    
            LogModel logModel = new LogModel();
            logModel.Log = log;
            logModel.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            logQueue.Add(logModel);
        }
        //在程序加载的时候,调用一下此方法
        public static void QuickLogToDatabase()
        {
    
    
            Task.Run(() =>
            {
    
    
                string sql;
                while (true)
                {
    
    
                    try
                    {
    
    
                        var logModel = logQueue.Take();
                        //以下是写入耗时日志的部分,由自己的具体情况而定
                        //sql = string.Format(Function.SQL.InsertLog, logModel.Log, logModel.Time);
                        //Function.Helper.MySQLHelper.ExecuteNonQuery(sql);
                    }
                    catch (Exception ex)
                    {
    
    
                        Thread.Sleep(1000);
                        //catch部分,可以写入本地的txt
                        //DebugLog("QuickLogToDatabase:" + ex.Message);
                    }

                }

            });
        }
        public class LogModel
        {
    
    
            public string Log {
    
     set; get; }
            public string Time {
    
     set; get; }
        }

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34677276/article/details/131996157