問題タブ [parallel.foreach]

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 投票する
1 に答える
483 参照

.net - Parallel.ForEach がすべてのスレッドを生成しない

Parallel.ForEach の使用に問題があります。着信接続を待機して応答する、いくつかのハードウェア コンポーネントをシミュレートする必要があります。

私の現在のコードは次のとおりです。

私が抱えている問題は、すべてのコンポーネントが独自のスレッドを作成するわけではないということです。スレッドの 1 つが終了しても、それらはまだ生成されません。

コレクション内のコンポーネントの現在の量は 40 で、生成されたスレッドの数は 33 (または少なくともそのように見える) です。

Parallel.Foreach() は、渡された列挙可能なコレクション用の新しい並列スレッドを作成するという印象を受けました。

私が間違っていることはありますか?

0 投票する
4 に答える
14493 参照

c# - Parallel.ForEach/マルチスレッドの最適な使用法

Webサイトからデータを取得する必要があります。アクセスする必要のあるリンクが1,000以上あり、以前はスレッドごとに10のリンクを分割し、10をプルするたびに100のスレッドを開始していました。いくつかのテストケースの後、コンテンツを取得する時間を最小限に抑えるには、100のスレッドが最適なカウントでした。すべてのリンク。

.NET 4.0は、箱から出してすぐにマルチスレッドをより適切にサポートすることに気付きましたが、これはコアの数に基づいて行われ、私の場合は十分なスレッドを生成しません。私が求めているのは、1,000リンクのプルを最適化するための最良の方法は何かということだと思います。拡張機能を使用.ForEachして、Parallel生成されるスレッドの量を制御する必要がありますか、それとも、作業を開始して分割するスレッドの数を拡張機能に指示する方法を見つける必要がありますか?

私は以前に一緒に仕事をしたことがないParallelので、おそらく私のアプローチは間違っているかもしれません。

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

c# - Parallel.For エラー

Parallel.For で DateTime を取り除こうとしています:

コードの一部:

しかし、次の例外が発生します。

これを通常の for ループで実行すると、例外は発生せず、すべて正常に動作します。これを修正する方法はありますか?

0 投票する
1 に答える
7948 参照

c# - ThreadPool.QueueUserWorkItem と Parallel.ForEach の違いは?

次の 2 つのアプローチの主な違いは何ですか。

ThreadPool.QueueUserWorkItem

System.Threading.Tasks.Parallel ForEach

私はマルチスレッドが初めてで、各ケースで何が起こるかを知りたいです (実行プロセスに関して) 各アプローチのマルチスレッドのレベルは何ですか? 両方のプロセスを視覚化するのを手伝ってください。

SendFilesToClient:データベースからデータを取得し、Excel に変換して、Excel ファイルをそれぞれのクライアントに送信します。

ありがとう!

0 投票する
11 に答える
165180 参照

c# - 非同期ラムダを使用した並列 foreach

コレクションを並行して処理したいのですが、実装に問題があるため、助けを求めています。

並列ループのラムダ内で、C# で async とマークされたメソッドを呼び出したい場合に問題が発生します。例えば:

この問題はカウントが 0 の場合に発生します。これは、作成されたすべてのスレッドが事実上単なるバックグラウンド スレッドであり、Parallel.ForEach呼び出しが完了を待たないためです。async キーワードを削除すると、メソッドは次のようになります。

動作しますが、await の賢さが完全に無効になり、手動で例外処理を行う必要があります.. (簡潔にするために削除されました)。

Parallel.ForEachラムダ内で await キーワードを使用するループを実装するにはどうすればよいですか? 出来ますか?

Parallel.ForEach メソッドのプロトタイプはAction<T>as パラメーターを取りますが、非同期ラムダを待機させたいと考えています。

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

vb.net - parallel.foreach 複数の変数を関数に渡す

複数の CSV ファイルを読み取り、スレッドを使用してデータをクラスに渡す次のコードがあります。CSV パスと文字列を関数に渡す必要があります (どちらも動的である必要があります)。

同じことを行うために Parallel.ForEach を学習しようとしています。インターネットを検索すると、これが得られました(これは機能しません):

誰かがより良いアイデアを得ましたか?

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

c# - 何百万ものアイテムをあるストレージ アカウントから別のストレージ アカウントに移動する

Azure VM のサポートを利用するための大規模な移行の一環として、米国中北部から米国西部に移動する必要がある約 420 万の画像があります (知らない人のために説明すると、米国中北部はサポートされていません)。彼ら)。画像はすべて 1 つのコンテナー内にあり、約 119,000 のディレクトリに分割されています。

Copy Blob API から以下を使用しています。

問題は、遅すぎることです。うわー遅すぎる。このすべてのものをコピーするためのコマンドを発行するのにかかる速度で、およそ 4 日かかります。ボトルネックが何であるかはよくわかりません (クライアント側の接続制限、Azure 側のレート制限、マルチスレッドなど)。

だから、私は私のオプションが何であるか疑問に思っています。作業をスピードアップする方法はありますか? それとも、完了までに 4 日かかる作業に行き詰まっているだけですか?

編集:すべてをコピーするために作業を配布する方法

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

c# - 並列ループ内のローカル変数スレッドセーフ

cntネストされた内に変数( )がありますparallel.foreach。私はこのプログラムを実行しましたが、どうやらうまく機能しているようです。このコードが本当にスレッドセーフであることを誰かが知っていますか?parallelループ内で変数を定義することは可能ですか?

ありがとうございました。

0 投票する
1 に答える
411 参照

c# - コンソール アプリは asp.net アプリより遅い

parallel.for と parallel.foreach を使用して、さまざまなページを並行してダウンロードするクローラーボットがあります。MaxDegreeOfParallelism は約 20 に設定されています。これを増やしてもパフォーマンスはさらに向上しないようで、Web サーバーに過負荷をかけたくないからです。

ASP.NET Web サイト (すべての場所) からクロールを開始すると、許容できるパフォーマンスで実行され、すべて数時間かかります。このセットアップの設計上の問題により、代わりにコンソールから起動できるようにこれを変更しています。

必要なコードはすべて、Web サイトとコンソール アプリの両方からアクセスできる dll にあります。

起動メッセージを除いて、コンソールへの出力はありません。

問題は、これをコンソール (またはデバッガー) から実行すると、ASP.NET Web サイトから実行する場合よりも約 10 倍長く (!) かかることです。ASP.NET のバージョンがコンソールよりも遅い場合は、理解しやすいと思います。

これはなぜですか、またはこれをデバッグしたり、その理由を見つけたり、問題を修正したりするにはどうすればよいですか?

編集: これは、Visual Studio デバッガーを使用して両方のバリアントを試すときにも発生します。「デバッグ」から「出力」ウィンドウへの出力は、次のようになります。

スレッド '' (0x1d34) はコード 0 (0x0) で終了しました。スレッド '' (0xf20) はコード 0 (0x0) で終了しました。スレッド '' (0x3414) はコード 0 (0x0) で終了しました。スレッド '' (0x35c8) はコード 0 (0x0) で終了しました。スレッド '' (0xdc) はコード 0 (0x0) で終了しました。スレッド '' (0x1c98) はコード 0 (0x0) で終了しました。スレッド '' (0x3308) はコード 0 (0x0) で終了しました。スレッド '' (0x2b00) はコード 0 (0x0) で終了しました。スレッド '' (0x2f7c) はコード 0 (0x0) で終了しました。スレッド '' (0x345c) はコード 0 (0x0) で終了しました。スレッド '' (0x2a18) はコード 0 (0x0) で終了しました。スレッド '' (0x138) はコード 0 (0x0) で終了しました。スレッド '' (0x3650) はコード 0 (0x0) で終了しました。スレッド '' (0x376c) はコード 0 (0x0) で終了しました。

ただし、ASP.NET の場合、このテキストは約 10 倍高速に書き込まれます。

ダウンロードされたページごとに dll が COM 経由で 7zip を呼び出して圧縮することにも言及する価値があるかもしれません。