このリンク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()
助言がありますか ?