我如何改善这一点?
配置文件建议从列表中提取数据很慢
public List<RowDataDto> Rows { get; set; }
public RowDataDto GetRow(int rowNdx)
{
var row = Rows.SingleOrDefault(x => x.LineNumber == rowNdx);
return row;
}
该列表平均包含大约1000个项目,我只是通过实验来了解它的性能。
它说最慢的部分是从内存列表中获取。
在调用GetRow之前填充行。
LineNumber是一个int32
PS - 我刚刚安装了dotTrace,我是非常新的,所以我可能不了解如何正确使用该工具。我有简单的测试。我开始“.Net Process”告诉我的测试运行,并在某些时候点击拍摄快照。
如果您之前使用过此工具,请指导我。
答案 0 :(得分:0)
如果您有内存列表并且想要多次执行某些查找 - 最好使用字典而不是列表。为了便于使用,如果需要,您可以公开该字典值的只读集合(通常不会将字典公开为公共成员):
-ggdb3 -Og
另请注意,使用private Dictionary<int, RowDataDto> _rows;
public IReadOnlyCollection<RowDataDto> Rows {get {return _rows.Values;}}
public RowDataDto GetRow(int rowNdx)
{
var row = _rows.ContainsKey(rowNdx) ? _rows[rowNdx] : null;
return row;
}
很少有用。如果您的列表不应包含重复项 - 只需使用SingleOrDefault
即可。 FirstOrDefault
必须通过整个列表以确保没有重复项,在这种情况下,它将始终通过整个列表。