我有一个列表:用户集合,其中包含大约10万个用户记录(所有用户对象从数据库中完全加载,包括生物、名字、姓氏等字段)。此集合在应用程序启动时从数据库中获取并保存在内存中。
然后我有类似下面的代码:
User cachedUser = users.FirstOrDefault(x => string.Equals(x.UserName, username,
StringComparison.CurrentCultureIgnoreCase));
我使用Linq从这个集合中获取用户。但是我注意到这个操作非常缓慢。在使用Linq查询大量对象的内存集合时是否存在性能问题?我应该每次需要获取用户时调用数据库吗?
FirstOrDefault
是O(n)的吧?如果你有一个非常大的集合,逐一检查每个项目会花费一定时间。(而数据库通常已经建立索引)有很多方法可以加快这个过程,最简单的方法之一就是把它放到字典里。你没有这样做的原因吗? - Kirk WollSession
或Cache
对象来实现。 - Bryan Crosby