【发布时间】:2012-08-18 19:41:32
【问题描述】:
我有一个定义如下的类:
public class AlarmViolation
{
public string ObjectId { get; set; }
public int ChartType { get; set; }
public string AlarmInternalId { get; set; }
public short PositionInSequence { get; set; }
public short SequenceCount { get; set; }
public string TagValue { get; set; }
public DateTime PurgeDate { get; set; }
}
然后我创建一个此类的列表如下:
List<AlarmViolation> alarmViolationList;
我目前执行如下 Linq 查询:
return alarmViolationList
.Where(row => row.ObjectId == objectId)
.Where(row => row.ChartType == this.ChartType)
.Where(row => row.AlarmInternalId == this.InternalId)
.Where(row => row.PositionInSequence == positionInSequence)
.Where(row => row.SequenceCount == sequenceCount)
.Any();
我目前的实现表现很差。该列表通常包含介于 150K 和 300K 之间的条目。此查询会定期执行数百次(大约每 3 分钟一次)。
如果我能以某种方式索引这个列表,或者如果这是一个数据库表,我会在 ObjectId + ChartType 上创建一个索引。
有人可以提出更有效的实施方案吗?如果您需要更多信息,我很乐意提供。
【问题讨论】:
-
如果我要回答这个问题,我基本上会重复 usr 的回答和 Nawaz;它们不是相互排斥的,因此您可以使用 Nawaz 在您想要为 usr 使用的
IEquality<AlarmViolation>实现中建议的比较顺序更改。