【发布时间】:2011-12-27 22:53:02
【问题描述】:
上周我收到了一些代码,并被要求改进性能。所以开始了这项工作,但很快我就看到他们使用了很多 HashSet<T> 对象来存储大量对象(在 10000 到 100000 多个对象之间)。出于性能原因,他们在代码中使用HashSet<T>。
他们唯一要做的就是用对象填充 HashSet,然后使用一些 Linq 在多个集合之间执行查询。大多数查询是加入 1 或 n 个 HashSet,或使用 First() 或 Where() 从集合中检索特定对象。
我想知道与普通的List<T> 相比,我们是否获得了任何性能优势?因为他们在代码中使用的所有 Linq 扩展方法都是为 IEnumerable<T> 编写的。
网上很多文章都说 List 会更快,但也有人说 HashSet 处理大集合比 List 好很多。
希望有人能给我更多的建议。
谢谢。
【问题讨论】:
-
你不能轻松地写一个测试来比较这两者的性能吗?
-
我还要注意 HashSet 没有排序 - 取其
First元素是错误的,除非您需要任意元素,或者已经过滤了除一个元素之外的所有元素。 -
您的方法非常低效。使用分析器。
标签: c# performance linq-to-objects hashset