問題タブ [queueuserworkitem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1092 参照

vb.net - 何百万ものスレッドに ThreadPool.QueueUserWorkItem を使用する

何百万ものファイルを処理する必要があります。現在、カスタム スレッド マネージャーを使用して、DataGridView を使用してスレッドを追跡し、タイマーを使用してさらにスレッドを開始できるかどうかを確認します。のようなもの(sudo):

これには多くの欠点があります。主な欠点は、上記の各スレッドが各ファイルではなく完全なディレクトリを処理するため、CPU とメモリの使用率が高くなることです。

だから私はプロセスを書き直しました。これで、ファイル レベルでプロセスを実行し、結果をメイン スレッドに報告するクラスが作成されました。そのようです:

上記のクラスは魔法のように機能し、非常に高速で、メモリをほとんど使用せず、CPU もほとんど使用しません。Threading.Thread プロセスを使用して数百のスレッドでしかこれをテストできませんでしたが。

ここで、ThreadPool.QueueUserWorkItem を使用してファイルごとに上記のクラスを実行し、システムが特定の時間に実行するスレッドの数を制御できるようにします。ただし、サーバーをロックせずに数百万のスレッドを ThreadPool にダンプすることはできません。私はこれについて多くの調査を行いましたが、いくつかのスレッドで ThreadPool.QueueUserWorkItem を使用する例/議論しか見つけることができませんでした。私が必要としているのは、何百万ものこれらのスレッドを起動することです。

したがって、2 つの質問があります。1) ThreadPool.QueueUserWorkItem を使用してこれだけ多くのスレッドを実行する必要があるか、2) サーバーをロックすることなくこのプロセスを実行するには、以下のコードで十分ですか?

これまでの私のコードは次のとおりです。

0 投票する
2 に答える
560 参照

c# - ThreadPool.QueueUserWorkItem の終了後にメソッドを呼び出す

私はc#で書かれたコンソールアプリケーションに取り組んでいます

このアプリの目的は、すべてのドライブとファイルを調べて、それらに対して何かを行うことです。しかし、単一のスレッドですべてのファイルを処理するのは時間のかかるプロセスであり、私の目標ではありません。

だから私はThreadPoolそれを次のように処理するために使用することにしました:

問題はConsole.WriteLine("Job is done.")、すべてのスレッドが完了する前に実行されることです。いくつかの質問と回答を読みましたが、どれも私の問題に対処していません。

ThreadPoolジョブのすべてのスレッドが終了した後にメソッドを呼び出すにはどうすればよいですか?

注:ご存知かもしれませんが、いくつのファイルが存在するかわからないため、スレッドがいくつ作成されるかわかりません。また、タイムアウトの設定はオプションではありません。