問題タブ [concurrent-queue]
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# - ConcurrentQueue 操作で OutofMemory エラーが発生しています。
この質問は一般的すぎるかもしれません。しかし、私は多くのことを試しましたが、これを解決する方法を理解できません。
マルチスレッド操作に ConcurrentQueue を使用しています。1 つのスレッドがサーバーから画像をダウンロードし、キューに保存しています。そのためのコードは次のとおりです。
そして、別のスレッドがキューから画像を取得し、宛先フォルダーに保存します。そのためのコードは次のとおりです。
この 2 つのスレッドを Button_Click() から次のように呼び出しています。
キューのカウントが 68 に達するたびに MemoryFull エラーが発生します。これを回避する方法がわかりません。これを回避するために Thread.Sleep を使用してみました。たとえば、私が試したのは: Thread.Sleep(500)
after foreach
loop. 内部foreach
で試してみると、どの時点でもまったく問題なく動作しますImageQueue.Count = 1
。どこが間違っていますか?
c# - コンカレント キューを使用して、アプリケーションの 2 つのコンポーネント間でオブジェクトを渡す
私は、私の 1 つのコンポーネントから別のコンポーネントにデータを渡すために c# の並行キューを利用する私のプログラムを持っています。
コンポーネント 1: 複数のネットワーク接続がデータを受信し、それをこのキューに入れる
コンポーネント 2: このキューからデータを読み取り、処理します。
わかりました、すべてが理にかなっています(私は確かに願っています)。
今私が知りたいのは、2つのコンポーネント間でデータを渡すための最良/最も効率的な方法は何ですか?
オプション 1: コンポーネント 2 の新しいデータについてキューをポーリングしますか? ブロッキングコードが必要になるか、少なくともwhile(true)
オプション 2: これが可能かどうかはわかりませんが、それが私がここで質問している理由です。キューのデータ構造には、コンポーネント 2 をキューに登録して挿入/変更の通知を受けることができるという一種の機能がありませんか? このようにして、データが追加されるたびにフェッチすることができ、ブロック/ポーリングコードを回避できます。
c++ - キュー処理をマルチスレッド化する方法
C++ コンテナーは、デフォルトでスレッドセーフであると想定されています。queue
このコードの場合:
私は得ています:
ここで何が間違っていますか?
編集
上のリンクを読み間違えたようです。私がやろうとしていることを実行できるスレッドセーフなキューの実装はありますか? これが一般的なスレッド編成戦略であることは知っています。
c# - TryDequeue を while ループに入れても安全ですか?
以前に同時キューを使用したことがありません。
while ループで、以下のように TryDequeue を使用しても問題ありませんか? これは永遠に行き詰まることはありませんか?
c# - このように ConcurrentQueue を使用するか、個々のスレッドを使用する必要がありますか
私は、栄光のメールマージとPDFへのファイル変換に相当することを行っています... .Net 4.5に基づいて、スレッドを実行できる方法がいくつかあります。スレッド セーフ キューを使用するもの (プラン A) は興味深いようですが、潜在的な問題が見られます。どう思いますか?私はそれを短くしようとしますが、必要なものを入れます.
これは、PDF 変換よりもデータベース処理の方がはるかに時間がかかるという前提で機能します。
どちらの場合も、各ファイルのデータベース処理は独自のスレッド/タスクで実行されますが、PDF 変換は多数の単一スレッド/タスクで実行することも (プラン B)、単一の長時間実行スレッドで実行することもできます (プラン A)。 . 気になるのはそのPDF変換です。すべてが try/catch ステートメントにありますが、そのスレッドが失敗してはならず、すべてが失敗する (プラン A)。それは良い考えだと思いますか。任意の提案をいただければ幸いです。
プラン A は良い解決策のように思えますが、タスクが何らかの理由で失敗した場合はどうなるでしょうか? はい、PDF 変換は個々のスレッドで実行できますが、データベース処理用に予約したいと考えています。
これは私ができる最も単純なコードとしてテキストエディターで書いたので、何かがあるかもしれませんが、私はそのアイデアを理解したと思います.
c# - 含むの使用T がクラスまたは構造体の場合、ConcurrentQueue のメソッド
ConcurentQueue コレクションがよくわかりません。Tがクラスまたは構造体の場合、ConcurrentQueueでContainsメソッドを使用する方法は?
私のコード:
並行キューでcontainsメソッドを正しく使用するには?
c# - ConcurrentQueue から SQL Server テーブルに複数の行を挿入する
あるデータベースからデータを取得し、必要な変換を行い、そのデータを別のデータベースのテーブルに挿入する ac# アプリケーションがあります。これを行うには、ソース データをキューに挿入し、キューを処理してデータを宛先テーブルに挿入します。ソース データの読み取りと宛先データの書き込みを行う 2 つのスレッドがあります。読み取りスレッドは書き込みスレッドよりもはるかに高速に動作しているため、キューがすぐにいっぱいになります。
読み取りスレッドでわかるように、私は SqlCommand.ExecuteReader() を使用してデータを読み取ります。次に、キューをループし、行ごとに個別の INSERT ステートメントを実行しています。私が想定しているのは、行ごとに挿入する代わりに、何らかの処理を行うことです (おそらく Linq ステートメント)。私の挿入をより迅速に行う方法を誰かが知っていますか?
キュー定義:
読む:
書き込み:
c# - ConcurrentQueue を使用した List 内の項目の Parallel.For - これは機能しますか?
List<TaskClass> TaskList
Parallel ループを使用して繰り返し処理できる項目があります。
リスト内の項目は、TaskClass が独自のCompareTo(object obj)
メソッドで IComparable を実装するため、特定の順序で並べ替えられます。したがって、アイテムを順番に処理する必要があります。
順番に完了する必要はなく、順番に開始するだけであることに注意してください。
したがって、TaskList[0] を最初に開始する必要があります。次に、TaskList[1]、TaskList[2]、... ただし、TaskList[2] が最初に完了するか、TaskList[0] かは気にしません。
これは、これを試して軽減するために思いついた簡単なコードです。
今私が信じている問題は、Parallel.For ループが完了したときに、オリジナルList<TaskClass> TaskList
が最新の値で更新されていないことです。
これを達成するための最良の方法は何ですか?
次のような変更されたコードで?(「//new」でマークされた行)
または、他のアイデア/提案/改善点はありますか?
ありがとう!
c# - 並行キューを繰り返し反復するにはどうすればよいですか?
私はWinformsを使用しており、.Net 4.5をターゲットにしています
アイテムがある限り、同時キューを反復したい。私のアプリケーションでは、ユーザーはいつでも並行キューに項目を追加および削除できます。
サンプルコード:
while ループの実行中であっても、アプリケーション ユーザーはいつでもキューに項目を追加または削除できることに注意してください。