[英]Choosing the right sorted collection
对于将哪个集合用于我们的数据,我有些怀疑。
域是这个(示例):
对于每个超级市场,我们都会向集合中添加新商品,并带有时间戳和每次客户在收银机上付款时的总金额。
我们目前正在这样做:
我们有一个Dictionary集合,其键为= UniqueSupermarketID,其值为List <{timestamp,amount}>
每次客户付款时,我们只需将新商品添加到特定超市的商品中即可。
我们需要以以下方式从此字典中提取数据:
对于指定的超级市场,获取最新的收银机对象,其时间戳等于“ some timestamp”
目前,我们这样做是:
supermarketDictionary["supermarket_01"]
.OrderByDescending(i => t.TimeStamp)
.FirstOrDefault(i => i.TimeStamp == 'some timestamp')
显然,这很快就开始表现得像废话一样-因此,我试图找出将数据存储在哪个集合中。
我正在考虑使用普通的词典来保存“超市ID <->收银机列表”关系,并使用SortedDictionary作为用作键的时间戳/金额。
这是正确的方法吗? 我当然需要在时间戳上正确实现IComparable,以使其正常工作。
2014年1月3日更新:
当前,该列表中大约有700万行。 我们系统中列表的用法已确定为:
_states
.OrderBy(x => x.TimeStamp)
.FirstOrDefault(x => x.WtgId == wtgId && x.IsAvailable && x.TimeStamp >= timeStamp);
_states
.Where(x => x.WtgId == wtgId && x.IsAvailable && x.TimeStamp >= timeStamp && x.TimeStamp <= endDateTime)
.OrderBy(x => x.TimeStamp).ToList();
_states.Remove(state);
if (!_states.Contains(message))
_states.Add(message);
谢谢,
/丹麦丹麦哥本哈根
编辑:基于更新
好吧,看到您真正需要的东西有助于做出正确的决定。 如果您的数据已经整理好了,那么就不需要分类收集了,您的四种用法可以减少为一种->
搜索符合某些条件的一项
尝试使用PLINQ,并仔细评估其对LINQ的性能。 有这么多的条目,区别应该很好。
_states.AsParallel().FirstOrDefault(...);
它只会在后台创建几个线程,每个线程都将搜索集合的一部分,最后将结果合并。 .NET框架应为您选择最佳的线程数,但是如果您想尝试,请在.WithDegreeOfParallelism(x)
处.WithDegreeOfParallelism(x)
,其中x
是它将使用的线程数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.