将数据加载到数据表的最快方法是什么?

问题描述 投票:0回答:1

在这个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()

获得更多的性能差异

有什么建议吗?

c# datatable
1个回答
1
投票

正如 @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();

如果有的话,我会很高兴学习一种新方法,尽管这对我来说已经是一些新闻了...... 谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.