加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer的大容易数据文件导入之研究

发布时间:2020-12-12 15:54:18 所属栏目:MsSql教程 来源:网络整理
导读:????做一个项目,因为每十分钟都要做一次大容量的数据导入,于是使用BULK进行。在SQLServer的存储过程里写了BULK Insert语句后,运行一段时间很正常,以为没有什么问题了,没想程序运行了两周后,SQLServer占用的内存狂大,整个系统运行缓慢,查了一些资料,

????做一个项目,因为每十分钟都要做一次大容量的数据导入,于是使用BULK进行。在SQLServer的存储过程里写了BULK Insert语句后,运行一段时间很正常,以为没有什么问题了,没想程序运行了两周后,SQLServer占用的内存狂大,整个系统运行缓慢,查了一些资料,发现是BULK在存储过程中运行,会造成内存泄漏。后参考http://weblogs.sqlteam.com/mladenp/archive/2006/08/26/11368.aspx,用.NET2.0里提供的BULKCOPY来实现大容量数据导入功能,大体源代码如下:

private void StartImport()
{
    Stopwatch sw = new Stopwatch();
    sw.Start();
    SqlBulkCopy bulkCopy = new SqlBulkCopy("Server=ServerName;Database=test;Trusted_Connection=True;",
SqlBulkCopyOptions.TableLock); bulkCopy.DestinationTableName = "dbo.testSQLBulkCopy"; bulkCopy.WriteToServer(CreateDataTableFromFile()); sw.Stop(); txtResult.Text = (sw.ElapsedMilliseconds/1000.00).ToString(); } private DataTable CreateDataTableFromFile() { DataTable dt = new DataTable(); DataColumn dc; DataRow dr; dc = new DataColumn(); dc.DataType = System.Type.GetType("System.Int32"); dc.ColumnName = "c1"; dc.Unique = false; dt.Columns.Add(dc); dc = new DataColumn(); dc.DataType = System.Type.GetType("System.Int32"); dc.ColumnName = "c2"; dc.Unique = false; dt.Columns.Add(dc); dc = new DataColumn(); dc.DataType = System.Type.GetType("System.Int32"); dc.ColumnName = "c3"; dc.Unique = false; dt.Columns.Add(dc); dc = new DataColumn(); dc.DataType = System.Type.GetType("System.Int32"); dc.ColumnName = "c4"; dc.Unique = false; dt.Columns.Add(dc); StreamReader sr = new StreamReader(@"d:/work/test.txt"); string input; while ((input = sr.ReadLine()) != null) { string[] s = input.Split(new char[] { '|' }); dr = dt.NewRow(); dr["c1"] = s[0]; dr["c2"] = s[1]; dr["c3"] = s[2]; dr["c4"] = s[3]; dt.Rows.Add(dr); } sr.Close(); return dt; }
思路是将数据先存入内存中的一张临时表,再用BULKCOPY把临时表中的数据导入到真正的数据表中。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读