問題タブ [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.

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

c# - スレッド + While(真) + エンティティ

私はキャンドル レコーダー (Binance Crypto) を構築しています。これは、市場調査目的のキャンドル内データを含む、1 分間のキャンドルに興味深いものです (しかし、最終的には、この同じコードを使用して、実際に市場で何が起こっているかを監視することができます)。

最終的なラグ/EF/SQLパフォーマンスなどを回避するために、2つのスレッドを使用してこれを達成することにしました。

1 つは Binance からサブスクライブされた (非同期) トークンを受け取り、それらを ConcurrentQueue に入れ、もう 1 つは MSSQL でデータをデキューして保存しようとし続けます。

私の質問は、2 番目のスレッドである while(true) ループです。EF を使用して、これらの情報が個別に (場合によっては 300 ミリ秒で 300 の情報、場合によってはそれ以下) 入ってくる間、SQL に 200 + 情報/秒のように保存するための最良の方法は何ですか?

保存するたびにSQL conを開く必要がありますか? (パフォーマンス)。これを達成するための最良のアプローチは何ですか?

-- 編集済み -- ある時点でキューに 600k+ があったため、SQL への挿入で問題に直面しています Linq から SQL から EF に変更されました

これが私の実際のコードです:

前もってThx

ラファエル

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

c# - 再構築中の同時キューへのアクセスの防止

ConcurrentQueueキューにエンキューおよびキューからデキューするためのいくつかのヘルパー メソッドを持つオブジェクトを保持する があります。いくつかの基準に一致するアイテムをキューから削除してからキューを再構築する必要があります。これは、デキューされた最初のアイテムに含まれていない可能性があるためです。

どうすればこれを安全に行うことができますか?

ConcurrentQueueスレッドセーフであるはずですが、削除と再構築が行われているときにアイテムがキューに追加/削除されないようにしたいです。

私はこれを試していますが、それが正しいかどうかはわかりません。

私は公開し_emailMessagesていますが、適切なメソッドを呼び出さない限り、実際にはコレクションを変更していません。

そのメソッドの実行が完了するまで何もエンキューまたはデキューしないようにするために、ロジックの周りに何かを配置する必要があると思いますが、RemoveSiteEmailsAndRebuildQueueそれが何であるかはわかりません。