DataTable LoadDataRow vs ImportNewRow vs Rows.Add

时间:2013-06-15 10:45:13

标签: c# datatable

在此Link我找到了我的新快速(快于Rows.Add())实现,用于将数据添加到新DataTable(或列表我认为是这样...(:for一分钟那里)

我记得在ImportRow()最快的地方读书 虽然看起来这样使用ImportRow不会更新表行,它是否像DataTable.Clone()

实现多行的最佳方法是什么?从循环中的自定义数据加载到表中?

var returnedDtFromLocalDbV11 =  DtFromDb(strConnName, queryStr, strReturnedDtName);
NewDtForIns = returnedDtFromLocalDbV11.Clone();
Stopwatch SwSqlMdfLocalDb11 = new Stopwatch();
SwSqlMdfLocalDb11.Start();
NewDtForIns.BeginLoadData();

for (int i = 0; i < 1000000; i++)
{
   var Dr = NewDtForIns.NewRow();
   Dr[tblClients.LastName] = string.Concat(i, "_"+lastNameStr);
   Dr[tblClients.FirstName] = string.Concat(i,  "_" +firstNameStr);
   //NewDtForIns.Rows.Add(Dr) ;
   //NewDtForIns.ImportRow(Dr) ;
   NewDtForIns.LoadDataRow(new object[] { null, "NewShipperCompanyName", "NewShipperPhone" }, false);
}

 NewDtForIns.EndLoadData();
 DBRCL_SET.UpdateDBWithNewDtUsingSQLBulkCopy(NewDtForIns, tblClients._TblName);
 SwSqlMdfLocalDb11.Stop();
 var ResSqlMdfLocalDbv11_0 = SwSqlMdfLocalDb11.ElapsedMilliseconds;

更新

变得更快! 我的错误,我忘了评论使用LoadDataRow()

测试示例时需要时间生成的3个数据行
   //var Dr = NewDtForIns.NewRow();
   //Dr[tblClients.LastName] = string.Concat(i, "_"+lastNameStr);
   //Dr[tblClients.FirstName] = string.Concat(i,  "_" +firstNameStr);

现在我的配置中的测试结果是:

Rows.Add()        => ~6700ms
LoadDataRow()     => ~5200ms - 5500ms

这很不错,但我希望通过ImportRow()

获得更多性能差异

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

正如@Magnus所说,这是用新行填充DataTable的更快方法 简单易行的代码

Stopwatch SwSqlMdfLocalDb11 = new Stopwatch();
SwSqlMdfLocalDb11.Start();
NewDtForIns.BeginLoadData();

for (int i = 0; i < 1000000; i++)
{
   NewDtForIns.LoadDataRow(new object[] { null, "NewShipperCompanyName", "NewShipperPhone" }, false);
}

 NewDtForIns.EndLoadData();
 DBRCL_SET.UpdateDBWithNewDtUsingSQLBulkCopy(NewDtForIns, tblClients._TblName);
 SwSqlMdfLocalDb11.Stop();

我很乐意学习一种新的方法,如果有的话,虽然这对我来说已经是一些新闻...... 感谢。