問題タブ [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# - System.Threading.dll により、WPF アプリケーションの起動に 30 秒以上かかる
フレームワーク 3.5 をターゲットとする "完全に空の" WPF アプリケーション プロジェクトは、Windows 7 組み込み SP1 で開始するのに 30 秒以上かかります。
この問題は、Windows 7 Enterprise SP1 でも Windows XP でも発生しません。
WPF プロジェクトの唯一のことは、System.Threading.dll からの ConcurrentQueue の宣言/初期化です。
ConcurrentQueue が 3.5 フレームワークに存在しないため、この dll を使用する必要がありました。
これはシステムの問題のようですが、これは 2 つの ConcurrentQueue 間の問題でしょうか? 私のdllにあるものと、Windows 7組み込みコンピューターにインストールされたフレームワーク4.0にあるものは?
関連情報
System.Threading dll のバージョンは 1.0.2856.102 です。
編集
@Sinatr の提案に従って、別の ConcurrentQueue を作成しました (ConcurrentQueue、SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView、および IProducerConsumerCollection を ILSpy でコピーして貼り付けます)。
これで問題は解決しますが、その理由を知りたいです。
c# - 独自のスレッドでキューから作業する単一のコンシューマである、concurrentQueue の誤解
作成されたイベントを受け取り、別のスレッドが機能するようにキューに格納する機能する SystemFileWatcher を作成するのに問題があります。この問題に関してここで数え切れないほどのスレッドを読みましたが、この特定の問題に頭を悩ませることはできません。
}
これは私がテストしたいものです。これが機能しないことは承知しています。ファイルがキュー内に配置されたときにコンソールに書き込むだけで、FSW が機能することを確認しました。私の問題は、ムーバー関数を独自のスレッドで開始しようとしたときに始まります。キューから作業を開始すると、mover 関数と onCreated が通信していないように見えます。
このコードに対する私の期待は、独自のスレッドでムーバー関数を開始し、SFW と一緒に実行することです。私の期待は、blockingcollection にアタッチされた並行キューが自動更新されることです (私は onCreated を介してアイテムをキューに入れます。ムーバーはそのキューに +1 があることを確認します。ムーバーはキューから 1 つ取得し、onCreated はこれを確認します)。おそらく Thread.Sleep の使い方が間違っています。私はもはやblockingcollectionを使用する支持的な理由を持っていません. ロックの使用を見てきましたが、私が理解していることから、concurrentQueue がどのように同期するかにより、これは実際には必要ありません。
最終的な目標は、ランダムなタイミングで入ってくる大量の小さなファイルを処理することです。これらのファイルは .EML です。
可能であれば、何が起こっているのか、この問題を回避するための提案が何であるかについての説明をいただければ幸いです。私は謙虚に来て、私が理解していることはすべて間違っていると言われることを期待しています!
編集:これをコンソール アプリケーションとしてテストしていますが、後でサービスとして使用されます。while (true) ; を追加しました。onCreated() の前に FSW の実行を維持します。
windows - concurrent_queue は、try_pop() の各スレッドで同じ値を返します
私は、concurrent_queue を使用しようとしたときに、すべてが間違っていたのだろうかと思います。スレッドを使用してファイルを処理しようとしています。Threads は、concurrent_queue からファイル名をピックアップして先に進みます。私の問題は、4 つのスレッドがあるため、各スレッドが同じファイルを 4 回処理しているように見えることです。
私の主な目標は、キューから 4 つの異なるファイルを選択し、キューが使い果たされるまで個別に処理することでした。
コンソールの出力は
処理済み 1.txt 処理済み 1.txt 処理済み 1.txt 処理済み 1.txt 処理済み 2.txt 処理済み 2.txt 処理済み 2.txt 処理済み 2.txt
私は何を間違っていますか?
c# - 新しい ConcurrentQueue を作成できませんWindows 10で?
Windows 10 アプリでHashLib ライブラリを使用しようとしていますが、未処理の例外 ( System.MethodAccessException
)がスローされます。
メソッド 'HashLib.Hash.TransformStream(System.IO.Stream, Int64)' によるメソッド 'System.Collections.Concurrent.ConcurrentQueue`1..ctor()' へのアクセスに失敗しました。
それ以上の情報はありません。例外をスローする正確な行は、Hash.cs という名前のHashLibのソース ファイルの380 行目です。
MSDN でこの問題に関する手がかりが見つかりません。ポータブル クラス ライブラリでもサポートされていることがわかったので、通常の Windows 10 アプリでも動作するはずです。まったく同じコードが正常に使用され、WPF アプリケーションと Windows 8.1 アプリ内で問題なくテストされました。
c# - クラスオブジェクトの並行キューを同じオブジェクトのオブザーバブルコレクションに変換します
クラスオブジェクトを含む並行キューがあります。これらのオブジェクトを取得して、同じクラスオブジェクトの監視可能なコレクションに入れたいと思います。(基本的に、並行キューからコレクションにコピー/移動します。)
ここでは、マルチスレッド プロセス中に要素を同時実行キューに追加します。
そして、それらを取り出して、観察可能なコレクションに入れたいと思います。重複するオブジェクト (または同じ URL を持つオブジェクト) はありません。
現在、「エラー CS1526 新しい式には型の後に ()、[]、または {} が必要です」というメッセージが表示されます。これはおそらく最善の方法ではありません。
c# - WPF UIスレッドを同時に更新するには?
TPLを使用してマルチスレッドでディスクからデータを読み取るscanarioがあります。これらのスレッドから読み取ったデータを表示するプロセスのメイン スレッドとして WPF GUI があります。
WPF GUI のデータを処理中にリアルタイムで更新するにはどうすればよいですか? この点で、worker スレッドと UI スレッドの両方がデータを同時に生成および消費できるようにするには、concurrentQueue をどのように使用すればよいですか?
以下は、ワーカー スレッド コードです。
私のメインの WPF GUI は、他のグリッドをホストしている通常のグリッドです。
では、ワーカー スレッドが実行を終了し、UI スレッドが同時に結果を更新する必要があるように、同時キューを使用して単純なグリッドの上を更新するにはどうすればよいでしょうか。
c# - タスク実行のキューが非常に大きい場合の戦略は何ですか?
オブジェクトをConcurrentQueue TasksCollection
含むものがありITask
ます。Task
.Net フレームワークのクラスではありません。
そのため、何らかのイベントが発生すると、新しいタスクを作成ITask
して追加します。ConcurrentQueue
そして、スレッドループで、各タスクを取得して実行します(一部のコードを同期的かつ一貫して実行します。同時実行できないようです。
したがって、私の状況では、ランナーがリアルタイムのコンテキストで動作するため、キューをクリアして作業を続行できると思います。しかし、この状況には何らかのパターンが存在するのではないでしょうか? ConcurrentQueue
カウントが大きすぎる場合はどうすればよいですか?
ありがとうございました!