【发布时间】:2012-10-14 07:16:43
【问题描述】:
我正在搜索包含 3 列的通用列表(或 IQueryable)。我正在尝试根据 1 和 2 查找第 3 列的值,但搜索速度确实很慢。对于单个搜索,速度并不明显,但我正在循环执行此搜索,并且对于 700 次迭代,总共需要 2 多分钟的时间,这没有任何用处。第 1 列和第 2 列是 int,第 3 列是 double。这是我正在使用的 linq:
public static Distance FindByStartAndEnd(int start, int end, IQueryable<Distance> distanceList)
{
Distance item = distanceList.Where(h => h.Start == start && h.End == end).FirstOrDefault();
return item ;
}
在 IQueryable 列表中最多可以有 60,000 个条目。我知道这很多,但我认为这不会对搜索造成任何问题。
所以我的问题是,当需要匹配 2 列以获得第三列的值时,是否有更好的方法来搜索集合?我想我需要所有 700 次搜索几乎都是即时的,但每次搜索大约需要 300 毫秒,很快就会增加。
更新 - 最终解决方案######################
我现在使用Tuple 创建了一个字典,其中start 和end 作为键。我认为这可能是正确的解决方案。
var dictionary = new Dictionary<Tuple<int, int>, double>();
var key = new Tuple<int, int>(Convert.ToInt32(reader[0]), Convert.ToInt32(reader[1]));
var value = Convert.ToDouble(reader[2]);
if (value <= distance)
{
dictionary.Add(key, value);
}
var key = new Tuple<int, int>(5, 20);
工作正常 - 更快
【问题讨论】:
-
似乎是索引的明显问题。如果字典中的值被排序不会更快吗?
-
是的,我认为字典中的 2 列键可能是一个很好的方法。我需要调查一下
标签: c# asp.net-mvc linq