Linq订单的表现

时间:2012-02-29 01:48:24

标签: c# linq

我有一个字典(字符串,UDT),其中UDT定义为

// simplified structure
class UDT
{
   public DateTime datetime;
   public double size;
};

我必须按时间对字典进行排序,然后按尺寸排序。我现在正在做这样的事情 -

var result = dict.OrderBy(x => x.Value.datetime).ThenBy(x => x.Value.size);

foreach (KeyValuePair<string, UDT> val in result
{
}

这个词典的大小非常大,大多数应用程序瓶颈似乎都在这里。当项目被添加到字典中或者更有效地对项目进行排序时,有没有办法保持字典排序?

2 个答案:

答案 0 :(得分:2)

更合适的解决方案是,当您从字典中读取而不是将其保存在内存中时,通过排序来执行您已经在做的事情。我建议将排序结果缓存为List,但要减少开销量。

答案 1 :(得分:1)

如果你必须按IDictionary的值部分中的项重复排序,那么你做错了,至少对于大型数据集。

使用一个容器,它允许您以正确的顺序在插入时存储数据(例如SortedList,使用自定义比较器)或您随后的List。根据需要进行排序(同样,使用自定义)比较器)。这实际上取决于您添加数据的频率以及需要重新排序的频率。你必须为此做出衡量。