繁体   English   中英

在列表上使用“任意”等时的任何性能提升

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM