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);
           }
       }

posted on 2012-01-05 15:24  tank_坦克  阅读(582)  评论(2编辑  收藏  举报

导航