有这样一种场景需求,就是某个方法,对耗时要求很高,但是又要记录日志到数据库便于分析,由于访问数据库基本都要几十毫秒,可在方法里写入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; }
}