我正在搜索包含 3 列的通用列表(或 IQueryable)。我正在尝试根据 1 和 2 查找第 3 列的值,但搜索速度确实很慢。对于单个搜索,速度并不明显,但我正在循环执行此搜索,并且对于 700 次迭代,总共需要 2 多分钟的时间,这没有任何用处。第 1 列和第 2int
列是,第 3 列是 a 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 个条目。我知道这很多,但我认为这不会对搜索造成任何问题。
所以我的问题是,当需要匹配两列以获得第三列的值时,是否有更好的方法来搜索集合?我想我需要所有 700 次搜索几乎是即时的,但每个搜索都需要大约 300 毫秒,很快就会增加。
更新 - 最终解决方案#######################
我现在使用Tuple
withstart
和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);
工作正常 - 更快