在此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()
//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()
有什么建议吗?
答案 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();
我很乐意学习一种新的方法,如果有的话,虽然这对我来说已经是一些新闻...... 感谢。