簡體   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