有这样一种场景需求,就是某个方法,对耗时要求很高,但是又要记录日志到数据库便于分析,由于访问数据库基本都要几十毫秒,可在方法里写入BlockingCollection,由另外的线程写入数据库。
可以看到,在我的机子上面,1ms写入了43条日志。文章来源:https://www.toymoban.com/news/detail-617036.html
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; }
}
文章来源地址https://www.toymoban.com/news/detail-617036.html
到了这里,关于C# 快速写入日志 不卡线程 生产者 消费者模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!