Linq性能用于内存中的收集

Roc*_*ngh 7 c# linq asp.net performance .net-4.0

我有一个列表:集合用户有大约100K +用户记录(所有用户对象从数据库中完全加载,包括Bio,名字,姓氏等字段).此应用程序从应用程序启动时从数据库中获取并保存在内存中.

然后我有以下代码:

User cachedUser = users.FirstOrDefault(x => string.Equals(x.UserName, username,
StringComparison.CurrentCultureIgnoreCase));
Run Code Online (Sandbox Code Playgroud)

我用它来从这个集合中获取用户.但不知何故,我注意到这个操作非常慢.使用Linq查询大型对象的内存集合时是否存在性能问题?我是否应该在每次想要获得用户时调用数据库?

Bry*_*sby 8

我想你可能需要根据你给我们的信息重新思考你的架构.利用数据库,让它为您完成搜索工作.之后观察,测量并做出相应的更改.你可能会意识到你过早优化了整个事情.


Jas*_*ira 3

如果您想优化响应时间,您可以创建一个Dictionary<T,U>并在其中搜索用户:

    Dictionary<string, User> usersDictionary = new <Dictionary<string, User>(StringComparer.CurrentCultureIgnoreCase);

    // After querying the users from the DB add them to the dictionary             
    usersDictionary.Add(user.UserName, user);

    // Then when you need to retrieve a user
    User retrieveUser = null; 
    usersDictionary.TryGetValue(username, out retrieveUser);
Run Code Online (Sandbox Code Playgroud)

希望有帮助!