[英]Any performance gain when using Any etc on List
使用比旧的for循环方式更多的扩展方法时,性能会有所提高吗?
简而言之,没有; 性能很可能是稍微较差。
在实践中,这种方法的简洁性和清晰性将在循环中具有维护优势,并且不易出现错误。
可以这样考虑:如果您编写了50个循环而忘记在其中一个循环中进行短路评估,那么在全部50个循环中最好使用.Any
。
对于索引集合,您可以执行以下操作:
for(int i = 0; i < col.Length;i++)
{
if (predicate(col[i]))
return true;
}
return false;
但是对于非索引的IEnumerable<T>
,这是不可能的,因为它不提供索引器。 这将是框架中的实现(通过反射):
public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
if (predicate == null)
{
throw Error.ArgumentNull("predicate");
}
foreach (TSource local in source)
{
if (predicate.Invoke(local))
{
return true;
}
}
return false;
}
当迭代IEnumerable<T>
所有元素时,不会有性能提升。 但是,此方向上的任何“优化”都属于过早优化,如果存在性能问题,则在此算法中比在此函数中更可能修复该问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.