次のように定義されたクラスがあります。
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 を次のように作成します。
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 にインデックスを作成します。
誰かがより効率的な実装を提案できますか。さらに情報が必要な場合は、喜んで提供します。