問題タブ [concurrentdictionary]
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# - Microsoft Fakes を介して ConcurrentDictionary (C#) で長い外部依存関係をシムする方法は?
私がテストする必要があるコードでは、そのような外部依存関係が見つかりました:
var something = GConfig.SConfig[Type.ServiceType1].Names;
この部分のコードは次のようになります。
その依存関係をシムする必要がありますが、私自身では完全な解決策を見つけることができず、部分的にしか見つかりません:
GConfigIt (およびシミング名) の場合:Fakes.ShimGConfigIt.AllInstances.NamesGet
SConfig をシミングする場合:Fakes.ShimGConfig.AllInstances.SConfigGet
しかし、接続が見つかりません。完全にシムする方法です。
PS 私は単なるテスターであり、既存のコードを変更することはできません。変更を行うには、開発者にそれを行うよう説得する必要があります (つまり、GConfig の追加インターフェイス)。しかし、開発者は、それが「簡単なテスト」または「テストのためのテスト」のためだけの変更ではなく、実際に行う必要があることを確認する必要があります。
c# - C# の同時実行辞書
並行辞書の場合
(Cは何らかのクラスです)、辞書の値であるC0などのCのインスタンスに対して操作を実行する方法に関する規則と制限のリファレンスを知っている人はいますか? つまり、1 つのスレッドが C0 で直接操作を実行し、別の 2 つのスレッドが辞書を介して C0 で操作を実行している場合、競合状態に陥る可能性があると思いますか? (C がプリミティブである場合はそうしません)。
あなたが提案できる指針をありがとう!
ベスト、クリス
c# - C# のカスタム プロパティ クラスの基本クラスに Equality Comparer クラスを追加します。
私は ConcurrentDictionary を使用していますが、キーはパブリック プロパティを持つクラスで構成されています。
( ConcurrentDictionary の IEqualityComparer を使用した 10 進数の HashCode )のコードをいじった後、解決策を見つけたかったので、作成するすべてのプロパティ クラスに対してインターフェイス IEqualityComparer を使用してクラスを実装する必要はありません。
すべてのパブリック プロパティが設定されている (または少なくとも既定値ではない) かどうかを確認できる基本クラスを既に作成しました。そこで、IEqualityComparer クラスを基本クラスに追加してみようと思いました。
これまでのところ、私はこれを持っていて、うまくいきます。
この例は、3 つのプロパティだけで作成しました。通常、より多くの異なるタイプがあり、すべてのプロパティ クラスの concurrentDictionary で使用されるカスタム クラスを作成したくありません。
(もちろん) 現状では、TwoUintsOneStringsKeyInfo 型のプロパティ クラスに対してのみ機能します。これは、IEqualityComparer<> を実装するときに指定する必要があるためです。
EqualityComparerElevenUintsKeyInfo クラスを基本クラスに実装し、EqualityComparerElevenUintsKeyInfo がどのクラスが EqualityComparerElevenUintsKeyInfo を実装しているかをチェックし、そのクラスを IEqualityComparer、GetHashCode、および Equals のパラメーターとして使用する方法で柔軟にする方法はありますか?もちろん、Equals メソッドも変更します。
提案?
敬具、
マティス
.net - ConcurrentDictionary で LINQ ToDictionary を使用する
マルチスレッド アプリケーションでイベントを収集するために辞書を使用しています。イベントを追加するときは lock を使用し、検索するときは使用しません。約 1 時間ごとに、特定の時間より古いイベントのクリーンアップを実行します。非常にシンプルで機能します。
ConcurrentDictionary に移動してロックを解除したいのですが、「Concurrent」を追加して、Add を TryAdd に変更するだけでよいと考えました。しかし、その後、LINQ が ToDictionary のみを返すというエラーが発生しました。私は明らかに LINQ を使用できませんが、LINQ を保存するためにできることがあるかどうか知りたいと思っていました。さらに重要なことは、ConcurrentDictionry に移行する前に考慮すべきことが他にありますか?
ありがとう
c# - マルチスレッドサーバーで辞書を使用する方法
私は辞書の概念に不慣れです。複数のクライアントを処理できる単純なサーバーを作成する方法を見つけました。辞書/ConcurrentDictionary を使用して、接続が確立された時間やさまざまなクライアントに使用されているポートなどの情報を保持する方法はありますか? 別のサンプル ディクショナリを作成しましたが、それをサーバー アプリケーションで動作させる方法、または動作するかどうかさえわかりません。(サーバーは、localhost とポート 9090 を使用して作成されます。クライアントもローカルで実行されます)。説明が必要な場合はお知らせください。確立された接続情報を保持できるようにするために、辞書コードブロックをどのように/どこに配置しますか、それとも別の/より良い方法がありますか?
以下はサーバーコードです。
.net - ConcurrentDictionary のリストの順序は保証されていますか?
ログ行を保存するために ConcurrentDictionary を使用しています。それらをユーザーに表示する必要がある場合はToList()
、リストを生成するために呼び出します。しかし奇妙なことに、一部のユーザーは最新の行をリストの最初に受け取りますが、論理的には最後にあるはずです。
これは、ConcurrentDictionary が IEnumerate インターフェイスでの永続的な順序を保証していないためですか、それともその理由は何ですか?
c# - 並行辞書を別のメソッドに渡す
ConcurrentDictionary を out パラメータを使用して別のメソッドに渡す際に問題に直面しています。
メインメソッドでは、
私が得たエラーメッセージは、「割り当てられていないパラメーター辞書の使用」です。そして、コード全体で辞書の内容を保持する必要があります。助けてくれてありがとう。
c# - .Net 4.5.1 ConcurrentDictionary TryRemove() メソッドは割り当てられたメモリを解放しますか?
それぞれに 2 つの同時実行辞書を含む要素で構成されるキャッシュがあり、それらがアプリケーションのメモリ リークの原因である可能性があると思います。私は頻繁にこの辞書に追加したり削除したりしています。並行辞書のメモリ割り当てがどのように機能するか、および私の場合のベストプラクティスは何かについて説明してもらえますか? 前もって感謝します!