点跟踪配置文件,为什么我的内存提取被标记为慢

时间:2017-06-22 09:04:49

标签: c# dottrace

我如何改善这一点?

配置文件建议从列表中提取数据很慢

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”告诉我的测试运行,并在某些时候点击拍摄快照。

如果您之前使用过此工具,请指导我。

dot trace profile

1 个答案:

答案 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必须通过整个列表以确保没有重复项,在这种情况下,它将始终通过整个列表。