在此链接上,我找到了新的快速(比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()
有什么建议么 ?