Linq履行订单

本文关键字:Linq | 更新日期: 2023-09-27 18:26:09

我有一个字典(字符串,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
{
}

这个字典的大小很大,大部分应用程序瓶颈似乎都在这里。当项目被添加到字典中时,有什么方法可以保持字典的排序,或者更有效地排序吗?

Linq履行订单

一个更合适的解决方案是在从字典中读取时进行排序,而不是在内存中对其进行排序。不过,我建议将排序后的结果缓存为List,以减少开销。

如果必须重复按IDictionary的值部分中的项进行排序,那么至少在大型数据集中是错误的。

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