3

このリンクRows.Add()で、データを新しいものに追加するための新しい高速(より高速)の実装を見つけましたDataTable(またはリストでそう思いました...(:そこに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()

助言がありますか ?

4

1 に答える 1