2009-03-31 12 views
1

私はXMLファイルを読み込んでSQL DBに情報を挿入する小さなアプリケーションを持っています。SQL文を実行する複数のコアを利用する

〜1000個のファイルがあり、インポートするファイルは〜1000個です。

ファイルの20%でアプリケーションを起動し、18時間実行していますが、残りのファイルについてはこの時間を改善できたらいいと思います。

私はマルチスレッドのアプローチを使用していませんが、私が実行しているコンピュータには4つのコアがありますので、性能についていくつか改善することを考えていました(主な問題はI/Oだけでなく処理も)。

SqlCommandオブジェクトでBeginExecutingNonQuery()メソッドを使用することを考えていましたが、挿入ごとに作成しましたが、同時スレッドの最大量を制限する必要があるかどうかはわかりません。

最高のCPU使用率を得るにはどうすればよいですか?

おかげ

答えて

0

bulk insertを調べます。

データファイルをデータベースの表またはビューにユーザー指定の形式でインポートします。

0

SqlBulkCopyを試しましたか?基本的には、データをDataTableインスタンスに読み込んだ後、SqlBulkCopyクラスを使用してSQL Serverに読み込みます。 bcpや他のユーティリティを使用する場合ほど、現在のプロセスに大きな変更を加えることなく、巨大なパフォーマンスを向上させることができます。

+0

事は、それを挿入する前に情報にいくつかの小さな処理をしなければならない、基本的にファイルは4つの異なるテーブルに入る情報が含まれていますが、私は見てみましょう、それは有用かもしれません。 ありがとう – willvv

+0

この場合でも役立つはずです。処理の結果を保持するには4つのDataTableが必要ですが、いずれにしてもパフォーマンスを向上させる必要があります。 –

2

あなたが正しく理解していれば、それらのファイルをデータベースを実行しているのと同じマシンで読み込んでいます。私はあなたのマシンについてよく知らないが、私はあなたのボトルネックがディスクIOであると確信している。これは私にとってひどく計算量が多いとは言えません。

+0

私はプロセスが計算集約型ではないことを知っていますが、4回の同時挿入を行うと、SQLは複数のコアを利用してより効率的に処理します。 はい、IOは集中的ですが、少なくとも私はSQLをできるだけビジー状態に保ちたいと考えています。 – willvv

+0

次に、別の物理ドライブからdbを保持しているドライブからファイルを読み込んでいることを確認します。 – innaM

関連する問題