在这个Link我找到了我新的快速(比
Rows.Add()
更快)实现,用于将数据添加到新的DataTable
(或者在列表中我这么认为......(:在那里一分钟)
我记得在某处读过,
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 所建议的,这是用新行填充数据表的更快方法 漂亮又简单,代码行数更少
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();
如果有的话,我会很高兴学习一种新方法,尽管这对我来说已经是一些新闻了...... 谢谢。