有這樣一種場(chǎng)景需求,就是某個(gè)方法,對(duì)耗時(shí)要求很高,但是又要記錄日志到數(shù)據(jù)庫(kù)便于分析,由于訪問(wèn)數(shù)據(jù)庫(kù)基本都要幾十毫秒,可在方法里寫入BlockingCollection,由另外的線程寫入數(shù)據(jù)庫(kù)。
可以看到,在我的機(jī)子上面,1ms寫入了43條日志。文章來(lái)源:http://www.zghlxwxcb.cn/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);
}
//在程序加載的時(shí)候,調(diào)用一下此方法
public static void QuickLogToDatabase()
{
Task.Run(() =>
{
string sql;
while (true)
{
try
{
var logModel = logQueue.Take();
//以下是寫入耗時(shí)日志的部分,由自己的具體情況而定
//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; }
}
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-617036.html
到了這里,關(guān)于C# 快速寫入日志 不卡線程 生產(chǎn)者 消費(fèi)者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!