DataTable LoadDataRow vs ImportNewRow vs Rows.Add
本文关键字:vs Add Rows ImportNewRow DataTable LoadDataRow | 更新日期: 2023-09-27 18:18:36
在这个链接中,我发现了我的新快速(比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();
如果有新的方法,我会很高兴学习,尽管这对我来说已经是一些新闻了…谢谢。