0

ログを含むテキスト ファイルから読み取り、それらを MongoDB コレクションにバッチ挿入するマルチスレッド (スレッドプールを使用) C# プログラムがあります。ファイル全体をコレクションに挿入するのにかかる時間を測定する一貫した正確な方法が必要です。

thread.join を実際に呼び出すことはできません (これはスレッドプールであるため)。また、別のスレッドで実行されているため、ストップウォッチを使用することもできません。

次善の策は何ですか?

私が現在行っている方法は、スマートフォンのタイマーです。db.collection.stats()カウントがファイル内のログの数と同じになるまで繰り返し呼び出して待ちます...

4

2 に答える 2

1

C# 4.0 以降を使用している場合は、CountdownEventクラスを使用することをお勧めします。そのクラスを使用すると、たとえばカウンターとしてログの数を持つインスタンスを作成できます。

var countdown = new CountdownEvent(numberOfLogs);

次に、MongoDB への書き込みが完了するたびに、ワーカー スレッドからシグナルを送ります。

countdown.Signal(); // decrement counter

次に、メイン プロセス (または別のスレッド) で:

countdown.Wait(); // returns when the count is zero
// All writes complete
于 2013-07-12T18:22:42.220 に答える
1

(コマンド ライン ツール) を使用mongostatすると、MongoDB サーバーで何が行われているかを正確に確認できます。1秒あたりの挿入/クエリなどを提供します。挿入が完了しても自動的に停止することはありませんが、パフォーマンスに対する洞察は間違いなく得られます。インポートが完了すると、「挿入」は 0 になります。

于 2013-07-12T15:50:54.173 に答える