gpt4 book ai didi

大列表的 C# Linq 性能

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:59 24 4
gpt4 key购买 nike

我有一个应用程序,它基本上接受一个列表(由用户提交)并为列表中的每个项目返回一组数据。我的主要问题是我有一个很大的集合,我存储在内存中以避免每次查询数据库的成本,但我的查询仍然需要将近 0.5 秒,这太长了。

集合是美国和加利福尼亚州的邮政编码,有近 100 万条记录。来自用户的列表从几十条到几千条记录不等,我需要为每条记录都这样做,所以对于大列表来说会非常耗时。这是查询:

var resultList = PostalCodeList.Where(p => p.postalcode == userPostalCode).ToList();

邮政编码列表还有其他相关数据(国家、地区等)也需要返回给用户。一共5个字段。所有字符串。

数据的组织方式可能会导致给定值有 2 个结果,因此我需要考虑到这一点。

任何想法或建议都会很棒。谢谢!

最佳答案

查询数据库是否会影响性能,或者您是否出于对数据库的恐惧而将数据缓存在这里?如果是后者,您可能会发现单个查询更适合您的需求,并且应该仅在遇到数据库性能问题时进行优化。

也就是说,您可能不必要地使用了 ToList()。如果您对结果所做的只是 foreach,那么您所做的就是枚举集合两次(一次用于 ToList(),第二次用于 foreach )。如果可能,删除 ToList() 并直接使用 Where() 的结果。如果列表的迭代是主要的开销,那么您应该会发现这会将查找时间减少了大约一半。

除此之外,正如其他人在他们对您的原始问题的评论中所述,您可能会发现切换到支持快速查找的方法(即哈希集)是完全避开 O(n) 查找时间的唯一方法随着集合的增长,将会遇到。

关于大列表的 C# Linq 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27607723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com