GroupBy 和 MoreLinq 的 DistinctBy 之间的性能差异
Performance difference between GroupBy and MoreLinq's DistinctBy
阅读 this 问题(和答案)我发现至少有两种方法可以从 IQueryabe
中获取不同的项目,同时仍然可以选择要过滤的内容。这两种方法是:
table.GroupBy(x => x.field).Select(x => x.FirstOrDefault());
或使用 MoreLinqs DistinctBy
table.DistinctBy(x => x.field);
但是该线程并没有解释性能差异以及我何时应该使用一个而不是另一个。那么我什么时候想用一个而不是另一个呢?
他们所做的事情有很大的不同,因此性能差异是意料之中的。
GroupBy
将为原始集合中的每个键创建一个集合,然后再将其传递给 Select
。 DistinctBy
只需要保留一个哈希集,其中包含以前遇到过密钥的天气,因此速度会快得多。
如果 DistinctBy
足以让您一直使用它,如果您需要每个组中的元素,则只使用 GroupBy
。
同样对于 LINQ to EF,例如 DistinctBy
运算符将不起作用。
阅读 this 问题(和答案)我发现至少有两种方法可以从 IQueryabe
中获取不同的项目,同时仍然可以选择要过滤的内容。这两种方法是:
table.GroupBy(x => x.field).Select(x => x.FirstOrDefault());
或使用 MoreLinqs DistinctBy
table.DistinctBy(x => x.field);
但是该线程并没有解释性能差异以及我何时应该使用一个而不是另一个。那么我什么时候想用一个而不是另一个呢?
他们所做的事情有很大的不同,因此性能差异是意料之中的。
GroupBy
将为原始集合中的每个键创建一个集合,然后再将其传递给 Select
。 DistinctBy
只需要保留一个哈希集,其中包含以前遇到过密钥的天气,因此速度会快得多。
如果 DistinctBy
足以让您一直使用它,如果您需要每个组中的元素,则只使用 GroupBy
。
同样对于 LINQ to EF,例如 DistinctBy
运算符将不起作用。