我目前正在開發一個項目,我必須管理大量獨特元素。每個元素都有〜20個屬性,每個元素都有一個公共屬性DateTime。HashSet <T>性能(與ObservableCollection <T>相比)?
屬性DateTime不是唯一的,所以我不能使用通用字典來存儲我的數據。
目前我將這些元素放入ObservableCollection中,但從集合中移除元素的性能非常慢,我最終等待~20秒鐘以從〜25.000個元素的集合中移除〜7000個元素。
(搜索操作似乎非常有效,從300,000個元素的未分類集合中找到80個隨機選擇的元素只需要約30 ms)。
每個元素通過簡單地返回DateTime.GetHashCode()來實現GetHashCode()方法。
我想到用一個HashSet,而不是一個ObservableCollection會增加我的表現頗有幾分,但似乎並未有根本的影響...
,並使用通用字典更是雪上加霜。 ..
如果元素具有「良好」的散列函數(有很少的元素具有相同的散列碼),那麼HashSet是不是比ObservableCollection更強大?
'HashSet'也必須是唯一的。 –
SLaks
但是,如果DateTime屬性是* not * unique(根據帖子),爲什麼您使用該非獨特屬性的GetHashCode()? – Tigran
ObservableCollection和HashSet不能達到相同的目的。你開始使用ObservableCollection的原因是什麼?你是否將它綁定到WPF或Silverlight控件? HashSet爲基本操作(添加,刪除,包含和大小)提供恆定的時間性能。 – Martin