問題タブ [parallel-extensions]
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# - PLINQ クエリ、実行された反復回数を知る必要があります
私が基本的にやっていることは、一連の文字の組み合わせを並行して反復することです。必要な組み合わせを取得すると、それが勝利と見なされます。このクエリからすべての勝利を取得したいのですが (これは正しく行われています)、勝利のテストが実行された回数を追跡する方法が秘訣でした (基本的には、勝利した true/false を返すメソッド)。 )。
コンボのテストが実行されるたびにインクリメントするクラスにインスタンス変数を作成していますが、プロセスを実行するたびに、このインスタンス変数に対して異なる番号が取得されます。スレッドの問題であることは認識していますが、解決方法がわかりません。
これがヒットしたときにクエリを停止する必要がある勝利の数には最大制限があります。その制約がなければ、すべてのコンボが実行されるため、明らかにコンボが実行される回数を知る必要はありませんが、ご覧のとおり、最大数に達したときにクエリから抜け出す必要があります。限界。
java - マルチコアでの Java 並列実行
C# や Linq のように、Java でクエリを並列化する方法が存在するかどうか (またはフレームワークやライブラリがあるかどうか) を知りたいです。
そして、もし私がC#でこのようなことをすることができればクエリを並列化できない場合(並列化されたものごとに):
フレームワークやライブラリを投稿する場合は、それを使った経験を教えてください。お時間いただきありがとうございます。
C# と linq については、こちらのドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/dd997425.aspx
linq - ラムダはlinqクエリよりも高速ですか?
ラムダ、linq、および並列で遊んでいると、1つの質問が届きます。
ラムダはlinqクエリよりも高速ですか?
O いくつかのテスト コードを記述し ( GitHub で Fork します)、ラムダ メソッドの方が高速に見えます。それは本当ですか、それとも何か不足していますか?
c# - リーダーが閉じているときに Read を呼び出すのは無効です
このコードまたは非常によく似たコードを使用して、SQL Server データベースからデータを取得するさまざまなクラスのコードがいくつかあります。それらのほとんどは機能しますが、いくつかの問題が発生しており、その理由が本当にわかりません。上記のコードは 60 ~ 64 回実行され、行を取得しますが、無効な読み取りエラーが発生して終了します。あらゆるヒントについて記録をたどりましたが、それらの記録と停止の間のどこかにヒットしたようです。このクラスから他のクラス関数への呼び出しはありません。本質的に、これは実行されている唯一のものです。
私の接続文字列には 600 秒のタイムアウトがあり、mars も設定されています。別のメモ; これは、並列度が 2 に設定された Parallel.ForEach から呼び出されています。
私が言ったように、私はこのコードの構造をプログラム全体の複数の場所で使用していますが、そのほとんどはうまく機能しています。私が心配しているのは、エラーだけではなく、その発生の不一致です。
Parallel.ForEach を取り除き、foreach として実行すると、機能します。私はそれらのスレッドが必要ですが、そうしないと時間がかかりすぎます。そして、読者がどこで締めくくっているのかも気になります。
Exception : System.InvalidOperationException -- リーダーが閉じているときに Read を呼び出す試みは無効です。
呼び出されたコード:
接続をセットアップするコード:
接続文字列: Data Source=xxxxx;Initial Catalog=yyyyy;Trusted_Connection=True;MultipleActiveResultSets=True;Connection Timeout=600;
スタック トレース: C:\Subversion\branches\Fimmas\FimmasToInfoHub\GroupHubFeed の GroupDataAccess.EligibilityClassData.GetEligibilityClass(String id) の System.Data.SqlClient.SqlDataReader.Read() での .Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout) \GroupData\EligibilityClassData.cs: C:\Subversion\branches\Fimmas\FimmasToInfoHub\GroupHubFeed\GroupLogic\GroupExtract.cs の GroupLogic.GroupExtract.BuildEligibilityClass(String id, Group& group) の 95 行目: GroupLogic.GroupExtract の 188 行目。C:\Subversion\branches\Fimmas\FimmasToInfoHub\GroupHubFeed\GroupLogic\GroupExtract.cs: System.Threading.Tasks.Task.InnerInvoke() の 113 行目 System.Threading.Tasks.Task のc_ DisplayClass2.b _1() 。実行する()
ループを通過する最初の呼び出し(通常の foreach に変換すると、すべて問題ありません):
通話
どの呼び出し
それらの読み取りの1つにヒットします。
c# - .net の System.Threading.Task ライブラリ、具体的には Parallel.ForEach
MSDNのタスクに関する Microsoft のチュートリアルを見ました。
Parallel.ForEach() 静的メソッド呼び出しを示す例を示しています。そのメソッド呼び出しでは、4 つのパラメーターがあります...最初のパラメーターは Int の配列である必要がありますか? それとも、すべてのスレッドが取り組んでいる何らかの種類のコレクションまたはオブジェクトでしょうか? 2 番目のパラメーターは、値 (または void) を返さないデリゲートである Action のようです。その2番目の変数は一体何のためですか?スレッド ローカル初期化子? 0 に初期化する理由 ここで一体何が設定されているのですか?3番目のパラメーターは単なるデリゲート(または私が考えるのが好きな関数ポイント)であり、ラムダ式の右側は実際の関数ですか?たとえば、実際の関数の名前をそこに書かずにその側に置くことはできますか? 例えば...
c# - Parallel.ForEachは新しいスレッドを生成し続けます
プログラムでParallel.ForEachを使用しているときに、一部のスレッドが終了していないように見えることがわかりました。実際、それは新しいスレッドを何度も生成し続けました。これは、私が予期していなかった動作であり、絶対に望まない動作です。
私の「実際の」プログラムと同じように、プロセッサとメモリの両方を多く使用する次のコード(.NET 4.0コード)を使用して、この動作を再現することができました。
私のクアッドコアで実行すると、予想どおり、最初は4つの同時スレッドで開始されます。ただし、時間の経過とともに、ますます多くのスレッドが作成されています。最終的に、このプログラムはOutOfMemoryExceptionをスローします。
上記の実験のメモリ使用量グラフは次のとおりです。
(スクリーンショットはオランダ語です。上の部分はプロセッサの使用量、下の部分はメモリの使用量を表しています。)ご覧のとおり、ガベージコレクタが邪魔になるたびに新しいスレッドが生成されているようです(ご覧のとおり) 。メモリ使用量の低下)。
なぜこれが起こっているのか、そして私がそれについて何ができるのかを誰かが説明できますか?.NETで新しいスレッドの生成を停止し、既存のスレッドを最初に終了させたいだけです...
c# - 可能な限り高速に並行して webrequest アイテムのリストを処理する
フェッチしたい URL のバッチがあります。リストには、異なるドメイン名の URL (50.000 以上) が含まれていますが、すべてのドメインが同じ負荷分散サーバー IP を使用しています。
URLごとに、結果コード、フェッチ期間、コンテンツのハッシュ、およびリダイレクトヘッダーをログに記録したいと思います。
現在の方法では、1 秒あたり約 10 回のフェッチが行われ、応答時間は約 0.5 秒です。
次の実行を高速化するにはどうすればよいですか?
現在、次のコード構成があります。
はProcessItem
以下に基づいています。
次の構成が適用されています。
私は次のことを試しました:
- おそらく多くの Web リクエストを処理していると思っていたので、new ParallelOptions { MaxDegreeOfParallelism = 25 } を指定して Parallel.ForEach を制限しますが、それ以上下げてもパフォーマンスは向上しません。
- but を適用する
async
とTask.WaitAll(Task[])
、すべてのタスクが非常に高速に作成されるため、多くのエラーが発生しますが、ほとんどすべてが接続エラーになります。
興味深い観察結果は次のとおりです。
- 私のインターネットネットワーク接続は実際には負荷がかかっていないため、混雑していません
- cpu、メモリ、および IO も実際にはテストしていませんが、IO は落ち込みを示しています。
c# - TPL/TAP を使用して同等の機能を達成するにはどうすればよいですか?
以下に、Azure Service Bus キューを使用するかなり単純な .NET コンソール アプリを示します。
ご覧のとおり、Task.Factory を使用して 25 個のレシーバー タスクを起動し、APM スタイルの BeginMessageReceive メソッドを呼び出しています。次に、EndMessageReceive の最後で、もう一度 BeginMessageReceive を呼び出してループを続行します。
私の質問は、APM スタイルの BeginMessageReceive/EndMessageReceive から、再帰タスクを使用し、場合によっては C# 5.0 async/await を利用する TPL/TAP アプローチに切り替えて、同じようなことを達成するにはどうすればよいかということです。
MessageReceive タイムアウトの期限が切れた場合に再帰的に自分自身を再度呼び出すための新しい変更されたコード:
c# - 複数の IQueryable で同じ linq クエリを並行して実行していますか?
状況:を持っていList<IQueryable<MyDataStructure>>
ます。それぞれに対して単一のlinqクエリを並行して実行し、結果を結合したいと考えています。
質問:パラメータとして渡すことができる linq クエリを作成するにはどうすればよいですか?
コード例:
ここにいくつかの単純化されたコードがあります。まず、次のコレクションがありIQueryable<string>
ます。
文字「h」で始まるすべての単語を検索したいと思います。単一のIQueryable<string>
場合、これは簡単です:
IQueryable<string>
しかし、すべてのオブジェクトに対して同じクエリを並行して実行し、結果を結合したいと考えています。これを行う1つの方法は次のとおりです。
しかし、私はこれをより一般的な解決策にしたいと考えています。linq 操作を個別に定義し、それをパラメーターとしてメソッドに渡すことができるようにします。このようなもの:
しかし、私はこれを行う方法に途方に暮れています。何か案は?
task-parallel-library - NativeOverlapped または System.Threading.Overlapped は、PFX IOTaskScheduler でどのようなシナリオで役立ちますか?
PFX チームのParallel Extensions Extras DLLを見ていると、 NativeOverlappedおよび System.Threading.Overlapped メソッドを使用するIOTaskSchedulerが表示されます。
各拡張機能がいつ役立つかについてのドキュメントはあまりないため、ソース コードを読んで、特定の関数をいつ使用する必要があるかを判断するのは私次第です。
IOTaskScheduler または NativeOverlapped 機能はいつ使用しますか?