問題タブ [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 投票する
5 に答える
15573 参照

c# - Parallel.Foreach + 利回りリターン?

このような並列ループを使用して何かを処理したい:

わかりました、うまくいきます。しかし、 FillLogs メソッドが IEnumerable を返すようにするにはどうすればよいですか?

編集

それは不可能のようです...しかし、私は次のようなものを使用します:

しかし、私がcpt.Logs = cpt.GetRawLogs().ToList();命令を置く場所

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

c# - Parallel.Foreach c# 一時停止と停止機能?

parallel.foreach を一時停止して (終了する前に) 停止する最も効果的な方法は何でしょうか?

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

c# - Thread.Foreach の実行に関する混乱 - ヒットがない C#

私が書いた並列コードが、並列に検索しようとしている特定の文字列を見逃す理由を理解しようとしています。

これが私が持っているものです - StringCollection は辞書です。キーはハッシュで、値は文字列です。検索する辞書は全部で 4 つあります。- InputStrings[] は文字列の配列で、正確には 10 個を検索する必要があります。

私のコードでは

これを実行すると、8 つまたは 9 つのキーが見つかり、1 つまたは 2 つのキーが失われたままになります。検索しようとしているすべてのキーがコレクションに含まれていることはわかっています。検索されたキーは、特定の条件でさらに検索するために関数内で変更されます。つまり、キーが変更され、検索のためにサブディクショナリに渡されます。

したがって、私が提起するポイントは次のとおりです。

これは、スレッドが完了する前に終了していることを意味しますか? SearchCollection メソッドまたは SearchCollection メソッド内にロックを設定する必要がありますか? すべてのスレッドに 1 つのコレクションを使用しているため、TPL はロックを処理しますか?それとも、検索しようとしているコレクション自体のコピーを作成しますか?

どんな助けでも大歓迎です。ありがとう

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

.net - タスク Parallel.For Parallel.ForEach ロード バランシング、パーティショニング .Net

並列メソッド Parallel.For および Parallel.ForEach を実行します。

内部で独自のロード バランシングとパーティショニングを提供してパフォーマンスを向上させていますか?

もしそうなら、どのような状況で、Partitioner クラスを使用して独自のパーティションを作成してパフォーマンスを向上させたいですか?

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

c# - 複数のスレッドで共有されるオブジェクトで一意性を達成するための最良のアプローチは何ですか?

アプリケーションのパフォーマンスに関するいくつかのメトリックを構築するために、データベース + 他の関数への関数呼び出しのタイミングを計ることに興味があります。ストップウォッチとメトリクス オブジェクトを使用しましたが、一貫して正しい値が得られないようです。関数を呼び出すための経過時間がすべての呼び出しでまったく同じである場合があり、これは非現実的です...

問題の原因は Metrics オブジェクトのプロパティ値にあることがわかりました。1 つの Metrics オブジェクトの値は、他のスレッドによって生成された Metrics の他のインスタンスに値が割り当てられると上書きされます。各スレッドによって新しいインスタンスが作成されますが、プロパティ値は参照ごとのようです。

複数のスレッドで共有されるオブジェクトで一意性を達成するための最良のアプローチは何ですか?

以下のコード:

どんな助けでも大歓迎です。ありがとう、R

0 投票する
5 に答える
1795 参照

c# - parallel.foreachは機能しますが、なぜですか?

このプログラムがsqrt_minに正しい値を返す理由を誰かが説明できますか?

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

c# - Parallel.ForEachを制限するにはどうすればよいですか?

Parallel.ForEach()非同期ループがあり、これを使用していくつかのWebページをダウンロードします。帯域幅が制限されているため、一度にダウンロードできるのはxページのみですが、Parallel.ForEachは目的のWebページのリスト全体を実行します。

Parallel.ForEachの実行中にスレッド数またはその他のリミッターを制限する方法はありますか?

デモコード:

実際のタスクはWebページとは関係がないため、クリエイティブなWebクロールソリューションは役に立ちません。

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

c# - ReaderWriterLockSlim を使用した Parallel.ForEach のデッドロック

アプリケーションのデッドロックに関する興味深い問題があります。ReaderWriterLockSlim を使用して読み取りと書き込みを同期するインメモリ データ ストアがあります。読み取りメソッドの 1 つは、Parallel.ForEach を使用して、一連のフィルターを指定してストアを検索します。フィルターの 1 つが同じストアの一定時間の読み取りを必要とする可能性があります。デッドロックが発生するシナリオは次のとおりです。

更新:以下のコード例。
実際のメソッド呼び出しで更新されたstoreステップConcreteStoreThatExtendsGenericStore

  1. スレッド1 はストアで読み取りロックを取得します - store.Search(someCriteria)
  2. スレッド 2は、書き込みロックでストアを更新しようとします - -、スレッド 1store.Update()の後ろのブロック
  3. Thread1はストアに対して Parallel.ForEach を実行し、一連のフィルターを実行します。
  4. Thread3 ( Thread1の Parallel.ForEach によって生成される) は、ストアの一定時間の読み取りを試みます。読み取りロックを取得しようとしますが、Thread2の書き込みロックの背後でブロックされます。
  5. Thread1はThread3に参加できないため、終了できません。 Thread2はThread1の背後でブロックされているため、終了できません。

理想的には、現在のスレッドの祖先スレッドが既に同じロックを持っている場合、読み取りロックを取得しようとしないことです。これを行う方法はありますか?または、別の/より良いアプローチがありますか?

0 投票する
5 に答える
65361 参照

c# - MaxDegreeOfParallelismは何をしますか?

Parallel.ForEachを使用しており、データベースの更新を行っていますが、MaxDegreeOfParallelismを設定せずに、デュアルコアプロセッサマシンでSQLクライアントがタイムアウトします。それ以外の場合、クアッドコアプロセッサマシンはタイムアウトしません。

これで、コードを実行する場所で使用できるプロセッサコアの種類を制御できなくなりましたが、MaxDegreeOfParallelismで変更できる設定がいくつかあります。これにより、同時に実行される操作が少なくなり、タイムアウトが発生しなくなります。

タイムアウトを増やすことはできますが、CPUの負荷が低い場合に同時に処理できる操作が少なくなると、CPUへの負荷が少なくなるため、適切な解決策ではありません。

他のすべての投稿とMSDNも読みましたが、MaxDegreeOfParallelismを低い値に設定すると、クアッドコアマシンが問題になりますか?

たとえば、CPUに2つのコアがある場合、20を使用し、CPUに4つのコアがある場合、40のようなことを行う方法はありますか?

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

c# - Parallel.ForEach ループの動作

これは、Parallel.Foreach ループ機能を学習しようとしているサンプル テスト アプリです。

foreach の並列処理についての私の理解では、リストのパラメーターを使用して ProcessRandom メソッドを並列に実行するということです。そのメソッド内のすべての変数は分離され、互いに独立して実行されます。しかし、実行すると、整数 'i' に格納されているランダム値が月リストのいくつかのエントリで同じであることを示し、1 つまたは 2 つのランダム値が異なることがわかります。なぜこれはそのように振る舞うのですか?反復ごとに新しいランダム値を作成する並列ループはすべきではありません。parallelOptions を使用し、Parallelism の MaxDegree を 1 に設定すると、変数 'i' に異なる値が表示されます

並列ループを理解するために私を導いてください。