【发布时间】:2015-11-21 23:14:48
【问题描述】:
modelData 在列表中有 100,000 个项目。
我在 2 个循环中执行 2 个“选择”。
它的结构是否可以不同 - 因为它需要很长时间 - 10 分钟
public class ModelData
{
public string name;
public DateTime DT;
public int real;
public int trade;
public int position;
public int dayPnl;
}
List<ModelData> modelData;
var dates = modelData.Select(x => x.DT.Date).Distinct();
var names = modelData.Select(x => x.name).Distinct();
foreach (var aDate in dates)
{
var dateRealTrades = modelData.Select(x => x)
.Where(x => x.DT.Date.Equals(aDate) && x.real.Equals(1));
foreach (var aName in names)
{
var namesRealTrades = dateRealTrades.Select(x => x)
.Where(x => x.name.Equals(aName));
// DO MY PROCESSING
}
}
【问题讨论】:
-
您可以先删除
.Select(x => x)。 -
我认为您只需要一个按日期分组然后按名称分组的查询。
-
不必要或多余的
.Distinct可能会影响性能。这通常会强制对基础数据进行排序。确保没有其他方法可以完成同样的事情。 -
where 子句 x.real.Equals(1) 应该在 foreach 之前执行
-
除了优化您的 Linq 查询之外,您绝对应该确保在相关数据库字段上有一个覆盖索引。这可能会使您的流程加快 >90%。 100k 行真的不是一个大数字。
标签: c# performance linq