4

LINQ to SQLを使用して、古いDBFファイルをMSSQLにインポートしています。私はすべての行を読み取り、それらを使用してデータベースに追加していますctx.MyTable.InsertOnSubmit(row)

読み取りフェーズが完了した後、約100000の保留中の挿入があります。 ctx.SubmitChanges()当然、時間がかかります。

進捗状況を追跡する方法はありますctx.submitchanges()か?ctx.Logどういうわけかこの目的に使用できますか?

更新ctx.GetChangeSet().Inserts.Countログを使用して挿入ステートメントを使用および追跡することは可能ですか?

ctx.SubmitChanges()トランザクションが必要なため、すべてまたは何も必要ないため、小さなチャンクに分割することはできません。

更新2: 挿入をカウントしようとする素晴らしいクラスActionTextWriterを見つけました。

http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

アップデート3:

私は最初のコードプロトタイプを作成しましたが、最適化されていません。動作しているようです:)

ctx.Log = new ActionTextWriter(s => {
 counter += s.Split(' ').Count(w => w.ToUpper() == "INSERT");
 ReportProgress(counter);
});
4

1 に答える 1

0

ログを解析してActionTextWriterを使用することで、進捗情報を取得できました。

http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

ctx.Log = new ActionTextWriter(s => {
    if (s.StartsWith("INSERT INTO"))
        insertsCount++;
});
于 2010-12-30T20:06:36.260 に答える