私は現在、独自の要素の大規模なセットを管理する必要があるプロジェクトに取り組んでいます。各要素には最大 20 個のプロパティがあり、すべての要素にはパブリック プロパティ DateTime があります。
プロパティ DateTime は一意ではないため、一般的な辞書を使用してデータを保存することはできません。
現在、これらの要素を ObservableCollection に入れていますが、コレクションから要素を削除するパフォーマンスは非常に遅く、25.000 要素のコレクションから 7000 要素を削除するのに 20 秒ほどかかります。
(検索操作は非常に効率的であるようです。300.000 個の要素のソートされていないコレクションからランダムに選択された 80 個の要素を見つけるのに、わずか 30 ミリ秒しかかかりません)。
各要素は、DateTime.GetHashCode() を返すだけで GetHashCode() メソッドを実装します。
ObservableCollection ではなく HashSet を使用すると、パフォーマンスがかなり向上すると思いましたが、まったく効果がないようです...
そして、一般的な辞書を使用するのはさらに悪いです...
要素に「適切な」ハッシュ関数がある場合 (同じハッシュ コードを持つ要素はほとんどありません)、HashSet は ObservableCollection よりも強力ではありませんか??