SQLSERVER 批量数据写入
1.数据库记录日志,用户发起的每个访问,如果都采取即时写入SQLServer的表中,因为频繁的数据库连接,一个造成数据库压力过大,另一个是频繁的连接,降低程序性能。
最好的办法是,采用DataTabale内存缓存,当记录数达到一个量级是,采用SqlBulkCopy批量写入数据库。采用此中办法记录日志,对于大批量频繁的数据写入,性能会有个明显的改善。
例如,我们先创建一个空的DataTable表结构,列对应和数据库中的列对应。
static DataTable dtLog = InitTable();
/// <summary>
/// 日志批量插入日志数据库中
/// </summary>
/// <param name="sIP">用户IP</param>
/// <param name="curTime">当前系统时间</param>
/// <param name="iTime">验证系统响应时间</param>
public static void WriteLog(string sName, string sURL, string sIP, DateTime curTime, int iTime)
{//如果记录数达到10000次,写入数据库中
if (iTableCount >=10000)
{
tempLog = dtLog;//单独开辟一个线程,往数据库中写入记录
//AsynWriteLog ,数据库中写入日志方法
ThreadPool.QueueUserWorkItem(AsynWriteLog, null);
dtLog = InitTable();
iTableCount = 0;
}
else{
//记录数没有达到写入数据库中的记录数,继续往内存中添加
AddRowTable(sName, sURL, sIP, curTime, iTime);
}
}