問題タブ [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.
vb.net - ConcCurrentDictionary 初期化
ConcurrentDictionary を宣言して初期化することは可能ですか? 多分辞書のようなもの:
c# - Add() を使用するために ConcurrentDictionary から IDictionary にキャストする必要があるのはなぜですか?
ConcurrentDictionary
があり、その関数を使用したい場合は、次のAdd()
ようにキャストする必要がありますIDictionary
。
質問ConcurrentDictionary と IDictionaryは、プライベート メソッドを使用して明示的にConcurrentDictionary
実装しているためだと教えてくれます。IDictionary
私の質問:なぜそのようにConcurrentDictionary
実装されているのですか? 実装されたインターフェースの使用を隠すことの利点は何ですか?
c# - Parallel.ForEach 中に、この .NET コレクションを追加または更新するにはどうすればよいですか?
ファイルのリストがあり、各ファイルにはFoo
データのリストが含まれています。現在、同じ Foo データ (例: Id = 1
) が複数のファイルに存在する可能性がありますが、より新しいデータが既存のデータを上書きします。
各データをメモリ内コレクションに読み込んでいます。
私がファイルを読んでいるとき(emがいくつかあるため)、私も使用していますParallel.ForEach(files, file => { .. });
どうやってこれを行うのかわかりません。
を使用することを考えていましたが、where句を使用するConcurrentDictionary
方法がわかりませんでした。AddOrUpdate
助言がありますか?
c# - long (int64) を hashCode として使用し、並行辞書に IEqualityComparer を引き続き使用する
並行辞書で自作の IEqualityComparer と GetHashCode を使用すると問題が発生します。
以下のクラス (2 つのプロパティを使用して簡略化) は、次のように実装すると完璧に機能します。
.
ほぼ同じクラスを作成しましたが、通常の IEqualityComparer インターフェースの代わりに少し変更を加えたので、long / int64 hascodes を生成できました (クラスが保持するプロパティがますます多くなると、同じハッシュコードを持つ複数の値に遭遇するため)。
だから私は同じハスコードを取得する変更を減らしたかった. したがって、より大きな数値を使用し、可能であれば 10000 を掛けて、アクションの小数もいくつか取得したいと考えました。
したがって、私はこのインターフェースを作成しました:
プロパティクラスを変更して、次のようにします。
GetHashCode はうまくいきました。これまでのところ問題ありません。
しかし...次のようにIEqualityComparerをconcurrentdictionaryに追加しようとすると:
次のエラーが表示されます。
エラー 3 引数 1: 'HasCodeTestForUniqueResult.TwoUintsKeyInfoInt64.EqualityComparerOneUintAndTwoStringKeyInfo' から 'System.Collections.Generic.IEqualityComparer' に変換できません D:\Users\mldz\Documents\visual studio 2012\HashCodeTestForUniqueResult\HashCodeTestForUniqueResult\Form1.cs 109 140 HashCodeTestForUniqueResult
デフォルトの System.Collections.Generic.IEqualityComparer の int 型と、独自の GetHashCode ジェネレーターからの long / int64 の結果との間に競合があることを理解しています。しかし、これを解決して長いハッシュコードを使用できるようにする方法はありますか?
敬具、
マティス
PS上記のコードは、テストして問題を再現するためのものです。