問題タブ [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# - Parallel.For の Interlocked.Add を削除しますか?
いくつかのルックアップを実行し、parallel.for を使用して発生をカウントするコードがいくつかあります。
このバージョンは、逐次計算よりもはるかに高速です。しかし、Interocked.Add がボトルネックであるため、発生をカウントする別の解決策を見つけたいと思います。Plinq がオプションになるかどうかを調査していましたが、配列内の nextPos1 要素の出現をカウントする方法を見つけることができませんでした。
c# - PLINQForAllを注文しました
PLINQでの注文の保存に関するmsdnのドキュメントには、について次のように記載されていますForAll()
。
- ソースシーケンスが順序付けられたときの結果:非決定論的に並行して実行されます
- ソースシーケンスが順序付けされていない場合の結果:非決定論的に並行して実行されます
これは、メソッドの順序付けられた実行がForAll
保証されないことを意味しますか?
私はこれまでPLINQを使用したことがありませんが、次のコードレビューの質問は適切な使用法のように思われました。私の答えの一番下に私は書いています:
ドキュメントを読んだ後、私はAsOrdered()
何も変わらないと思いますか?
また、前のクエリfor
では、順序が重要な単純なループを置き換えることができないのではないかと思います。
おそらく、への並列呼び出しStringBuilder
も発生し、間違った出力になりますか?
c# - Plinq ステートメントが静的コンストラクター内でデッドロックする
静的コンストラクター内の次の plinq ステートメントがデッドロックするこの状況に遭遇しました。
コンストラクターが静的な場合にのみ発生します。誰かが私にこれを説明してくれませんか。
TPLバグですか?コンパイラ?自分?
c# - 説明してください AsParallel()
誰かが私に1つのことを説明できますか. 私が理解しているように、 AsParallel() は独自のタスクで実行されます。したがって、クエリが大量のデータを返す場合、「foreach」が Console.WriteLine の実行を開始したときに、変数「d」が空になる可能性がありますか?
postgresql - Postgres と Npgsql を使用した並列処理または PLINQ
12,000,000 行を超える Posrgres 9.04 データベース テーブルがあります。
各行を読み取り、(2 番目のテーブルに対して) いくつかの計算とルックアップを実行し、これらの計算の結果を使用して 3 番目のテーブルに新しい行を書き込むプログラムが必要です。完了すると、3 番目のテーブルの行数は 1 番目のテーブルと同じになります。
Core i7 720QM プロセッサでシリアル実行すると、24 時間以上かかります。8 つのコアのうちの 1 つにのみ課税されます (物理コアは 4 つですが、HTT 経由で Windows 7 に表示されるのは 8 つです)。
これを並列処理で高速化したい。PLINQ と Npgsql を使用できると思いました。
ただし、次のエラーが発生しますrecords.AsParallel()
:ソース タイプ 'System.Linq.ParallelQuery' のクエリ パターンの実装が見つかりませんでした。「選択」が見つかりません。範囲変数 'row' の型を明示的に指定することを検討してください。
私は多くの Google 検索を行ってきましたが、さらに混乱しています。NpgsqlDataReaderはSystem.Data.Common.DbDataReaderから継承します。これは、AsParallel拡張機能を持つIEnumerableを実装しているため、これを機能させるために適切なものが配置されているようです。
範囲変数の型を明示的に指定するために何ができるかは、私には明らかではありません。これを指定しないことをお勧めします。
PLINQ と互換性があると仮定して、DataSet への切り替えにオープンですが、12,000,000 行のため、可能であれば避けたいと思います。
これはNpgsqlで達成可能なものですか? 代わりに、Devart の dotConnect for PostgreSQL を使用する必要がありますか?
更新: http://social.msdn.microsoft.com/Forums/en-US/parallelextensions/thread/2f5ce226-c500-4899-a923-99285ace42aeを見つけたので、これを試してみました:
これまでのところ IDE でエラーは発生していませんが、これはこれを構築する適切な方法ですか?
.net - ParallelForeachメモリの問題
FileInfoCollectionにファイルコレクション(3000ファイル)があります。独立した(並列で実行できる)ロジックを適用して、すべてのファイルを処理したいと思います。
しかし、約700個のファイルを処理した後、メモリ不足エラーが発生します。以前にスレッドプールを使用しましたが、同じエラーが発生していました。スレッド化(並列処理)せずに実行しようとすると、正常に動作します。
「ProcessWorkerItem」では、ファイルの文字列データに基づいてアルゴリズムを実行しています。さらに、ロギングにlog4netを使用しており、この方法ではSQLサーバーとの通信が多くなります。
ここにいくつかの情報があります、ファイルサイズ:1〜2KBのXMLファイル。私はそれらのファイルを読みました、そして、プロセスはファイルの内容に依存しています。文字列内のいくつかのキーワードを識別し、別のXML形式を生成しています。キーワードはSQLサーバーデータベースにあります(約2000語)。
c# - DataTable の PLINQ
次のコードに PLinq を適用することは可能ですか:
改善の進歩は非常に高く評価されます。
c# - PLinqが63を超える並列スレッドをサポートしないのはなぜですか?
質問は明らかだと思います。PLinqでは、63を超えるスレッドを作成することはできません(WithDegreeOfParallelismでは許可されないため、ArgumentOutOfRangeExceptionがスローされます)。まれに、スレッドプールから63を超えるスレッドを取得する必要があります(タスクの完了に通常よりも多くの時間が必要なI / O操作など)。私の知る限り、Parallelクラスにも同じ制限があります。回避策はありますか?この制限の理由は何ですか?
c# - テスト内のWatiN並列化
1 つのページ内での個別の操作が異なる結果になることを確認するテストがあります。具体的には、ページを並べ替える方法がいくつかあり、各並べ替えが異なることを確認するテストが必要です。各種類の正確性を確認するために、他のテストがあります。
この会話の焦点は、何をテストするか、またはメソッドをテストすることではなく、テスト操作を並行して実行し、最後に結果を比較する良い方法にあることを望みます。テストにおける並列操作は、興味深いトピックであり、他の人にも役立つ可能性がある十分に広いトピックだと思います。
「generateHashFromSearchResults()」を、現在の IE インスタンスに表示される検索結果の順序を表す文字列を返す関数にします。以下は、1 つのブラウザー インスタンスを使用してシリアル化された方法で作業コードがどのように見えるかです。
数か月前に PLINQ について読んだことがあり、これは適切なユース ケースであると考えていました。ここで、「generateHashFromSearchResults(IE ie)」を同じ関数にしますが、明示的に定義された IE インスタンスで動作します。私はこのようなことを試しました:
私が現在直面している最大の問題は、PLINQ がスレッド管理を行う方法を理解していないことです。WatiN は、アパートメントの状態をシングル スレッド (STAThread) に設定して実行する必要があります。各 IE インスタンスは独自のスレッドにある必要がありますが、PLINQ クエリの各スレッドを適切なアパートメント状態に設定しても問題は解決しません。
続行するには PLINQ についてさらに学習する必要があるか、これを機能させるために手動でスレッド管理についてさらに学習する必要があるのではないかと疑い始めています。
何かご意見は?
c# - メインスレッドから Parallel.ForEach によって生成されたすべてのスレッドを強制終了するにはどうすればよいですか?
シナリオは次のとおりです。
実行中の Windows サービスがあります。OnStart()
関数を呼び出すタイマーを設定します(それを呼び出しましょうProcessEvent()
)。内部のコードProcessEvent
はクリティカル セクションであるため、次のことを実行できるのは 1 つのスレッドだけです。
ProcessItem
長い時間がかかる可能性があります。
サービスが停止すると、OnStop()
現在はタイマーを停止して破棄します。ただし、サービスが停止した後でも実行中のスレッドがあることに気付きましたProcessItem()
。
では、このプログラムによって生成されたすべての実行中のスレッド (主に によって生成されたものParallel.ForEach
だけでなく、 でロックを待機しているスレッドも含むProcessEvent
) をすべて強制終了するにはどうすればよいでしょうか?
自分でスレッドを作成したisBackground
場合、trueに設定でき、プロセスが終了するとすべてが強制終了されることはわかっていますが、これらのスレッドを手動で作成することはありません。