DataTable LoadDataRow vs ImportNewRow vs Rows.Add



在这个链接中,我发现了我的新快速(比Rows.Add()更快)实现,用于将数据添加到新的DataTable(或At列表,我认为是这样的…(1)

我记得在某处读到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;

转起来更快!我的错误是,我忘记注释3个数据行,这需要时间来生成,同时使用LoadDataRow()

测试示例
   //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()有更多的性能差异

有什么建议吗

正如@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();
如果有新的方法,我会很高兴学习,尽管这对我来说已经是一些新闻了…谢谢。

最新更新