SDR*_*yes 97 c# linq performance benchmarking
鉴于对象的大量集合,以下是否存在性能差异?
myCollection.Contains(myElement)
Run Code Online (Sandbox Code Playgroud)
myCollection.Any(currentElement => currentElement == myElement)
Run Code Online (Sandbox Code Playgroud)
Eti*_*tel 133
Contains()是一个实例方法,其性能在很大程度上取决于集合本身.例如,List上的Contains()是O(n),而HashSet上的Contains()是O(1).
Any()是一个扩展方法,只需遍历集合,在每个对象上应用委托.因此它具有O(n)的复杂性.
Any()更灵活,因为您可以传递委托.Contains()只能接受一个对象.
tst*_*ter 12
这取决于收集.如果你有一个有序的集合,那么Contains可以做一个智能搜索(二进制,哈希,b树等),而使用Any()你基本上坚持枚举,直到你找到它(假设LINQ为对象)
另请注意,在您的示例中,Any()使用"=="运算符来检查引用相等性,而Contains将使用IEquitable或可能被覆盖的Equals()方法.
归档时间: |
|
查看次数: |
52336 次 |
最近记录: |