問題タブ [plinq]
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.
c# - LINQ - 変更が多い場合、定期的に SubmitChanges() を行う必要がありますか?
RSS スレッドを読み込んで実行し、結果をデータベースに保存する「ロボット」のバッチがあり、多くのフィードを一度に取得できるように並列化しました。
「ProcessRssFeed」関数は、レコードが見つかったときにコンテキストに挿入できます。各フィードは、ゼロから数百のアイテムのいずれかになります。フィードはたくさんあるので、フィードごとに LINQ DataContext を作成したくありませんでした。
ただし、クライアントに何千ものレコードを蓄積する可能性があるのではないかと心配しています。メモリが不足する可能性があると思います。
ここでは同時実行の問題がないため、可能であれば DataContext に「必要に応じて定期的にレコードを送信してください」と伝えたいと思います。これを達成するための実用的な方法はありますか?
linq - C#/Linq での 2 次元配列の合計
整数の 2 次元配列があります。2 次元配列のすべての列を合計する最適化された高速なコードを書きたいと思います。
LINQ/PLINQ/TASK 並列化を使用してこれを行うにはどうすればよいでしょうか?
元:
c# - 並列のdo()while{}と同等
do
以下の方法で-while
または同様の並列同等物を作成するにはどうすればよいUpdate()
ですか?
アプリ内の別のスレッドがTestBuffer
ランダムに書き込みます。が空TestBuffer.RemoveItemAndDoSomethingWithIt();
になるまで実行する必要があります。TestBuffer
現在Update()
、コレクションが列挙されたときにコレクションに含まれていたアイテムでのみ実行されます。これは理にかなっています。
excel - すべての Excel ワークシート セルでキーワードを検索する際に Parallel / PLINQ を利用する最良の方法
タイトルのとおり、Excel に似List<string> keywords;
たオブジェクト モデルがあります。Workbook
WorkbookCell
リスト内のキーワードに一致するすべてを取得したいと思います。
私は多分 Parallel 検索が良い考えだと思っていました:
実際、これはあまりにも多くの並列でしょうか? より良いアイデアがあれば教えてください。
** 通常は 20 未満のワークシートしかありませんが、すべてのワークシートには 10000 を超える行と数百の列が含まれます。
c# - PLINQとBlockingCollectionを連携させる
ファイル作成イベントを監視し、ファイルコンテンツからいくつかのオブジェクトを作成し、いくつかの処理を行う簡単なアプリケーションをまとめました。サンプルコードは次のとおりです。
すべて正常に動作しますが、AsParallel(および次の2行)のコメントを外しても、すぐには結果が得られません。この遅延はおそらくPLINQのパーティショニングが原因ですか?ただし、BlockingCollectionに追加されるとすぐに、このクエリでアイテムが生成されることを期待しています。これはPLINQを使用して達成できますか?
c# - タスクの並列実行をブロックする Thread.Sleep
データベースを呼び出すワーカー メソッドを呼び出しています。このメソッドは反復処理を行い、並列処理のために値を返します。データベースに打撃を与えるのを防ぐために、DB への実行を一時停止する Thread.Sleep があります。ただし、これは Parallel.ForEach でまだ発生している実行をブロックしているようです。ブロックを防ぐためにこれを達成するための最良の方法は何ですか?
編集:回答を含めるように変更しましたが、期待どおりに機能しません。.AsParallel().WithDegreeOfParallelism(10) を GetWorkItems() 呼び出しに追加しました。ベース スレッドがスリープ状態であっても、Parallel は実行し続ける必要があると考えているのですが、私の予想は間違っていますか?
例: 15 個のアイテムがあり、10 個のアイテムを繰り返し取得して開始します。それぞれが終了すると、16 番目の項目を要求するまで、GetWorkItems から別の項目を要求します。その時点で、それ以上のアイテムの取得を停止する必要がありますが、完了するまでアイテム 11 ~ 15 の処理を続行する必要があります。それはどのように並行して機能するべきですか?現在はそれを行っていないためです。現在実行しているのは、6 が完了すると、Parallel.ForEach でまだ実行されている後続の 10 をロックすることです。
c# - スレッドがロックステートメントの到着を待機しているときにログに記録する
スレッドがに到着したときにスレッドがロックを待機していることをログに記録する簡単な方法はありますか?
?
スレッド1がロックに到達し、ブロック内に別のスレッドがない場合、ログはありません。次に、スレッド2がlock(x)に到達し、スレッド1がまだブロック内にある場合は、ログが存在するはずです。理想的なソリューションでは、ミューテックスまたはモニターに切り替える必要がなく、複雑さが増します。TPL、PLINQ、またはRXを使用してこれを行うための迅速で簡単な方法があれば、それは素晴らしいことです。
c# - PLINQ では、AsParallel().MaxDegreeOfParallelism(4) を使用するときに優先チャンク サイズを設定するにはどうすればよいですか?
何千ものオブジェクトのリストがあり、1 ~ 3 分かかる操作が実行されます。もちろん PLINQ を使用していますが、入力リストの最後に近づくと、パーティション分割が事前に決定されていたかのように、1 つのコアしか機能していないことに気付きました。
では、IList を使用して、処理する項目がある限り、PLINQ にワーカー スレッドを強制的に使用させ続ける最善の方法は何でしょうか? コンピューターには、利用可能なハードウェア コアが多数あります。
参考文献:
c# - LINQ:コンテキストに応じて AsParallel の戻り値の型を変更する方法は?
LINQ のAsParallel
戻り値ParallelQuery
. この動作を変更して、実際にコードを変更せずに、並列処理を使用した場合と使用しない場合の LINQ ステートメントの実行を比較できるようにすることは可能でしょうか? この動作は次のようになります。プリプロセッサ ディレクティブが設定されていない場合、最適化されますDebug.Assert
。だから私はそれをに変換せずに同じ型を返すDEBUG
ことができるようにしたいと思います。AsParallel
ParallelQuery
独自の拡張メソッドを宣言して (オーバーライドできないためAsParallel
)、その中でそのプリプロセッサ ディレクティブを分析できると思います。
他に方法はないのだろうか。求めすぎですか?
c# - Parallel Linq Extensionsを使用して2つのシーケンスを結合すると、最初に最速の結果を得るにはどうすればよいでしょうか。
整数1から5を返す2つのシーケンスがあるとしましょう。
最初は1、2、3を非常に速く返しますが、4と5はそれぞれ200msかかります。
2番目は200msの遅延で1、2、および3を返しますが、4と5は高速で返されます。
これらの両方のシーケンスを結合すると、1から5までの数字が得られます。
2つの方法のどちらがどの時点で遅延があるかを保証できないため、実行の順序で解決策を保証することはできません。したがって、私の例での(人為的な)遅延を最小限に抑えるために、ユニオンを並列化したいと思います。
実際のシナリオ:いくつかのエンティティを返すキャッシュと、すべてのエンティティを返すデータソースがあります。キャッシュされた結果ができるだけ速く生成されるように、リクエストをキャッシュとデータソースの両方に内部的に並列化するメソッドからイテレータを返すことができるようにしたいと思います。
注1:これはまだCPUサイクルを浪費していることに気づきました。シーケンスが遅い要素を反復処理するのをどのように防ぐことができるのか、できるだけ速くそれらを結合する方法を尋ねているのではありません。
更新1:複数のプロデューサーを受け入れ、ContinueWhenAllを使用してBlockingCollectionのCompleteAddingを1回だけ設定するように、achitakaさんのすばらしい応答を調整しました。コメントのフォーマットがないために失われるため、ここに配置しました。それ以上のフィードバックは素晴らしいでしょう!