Skip to main content
 首页 » 编程设计

集合和迭代器的 C# 性能

2024年01月29日25freeliver54

您能否解释一下示例 1 中采用的方法与示例 2 中的方法在性能上是否不同?如果是,哪个最有效,为什么。

我所说的“性能”不仅与执行速度有关。我还想要一些关于不同系统资源使用的解释。

1.

    private IEnumerable<string> GetObjectsStrings(List<object> input) 
    { 
        IList<string> result = new List<string>(); 
 
        foreach (var item in input) 
        { 
            result.Add(item.ToString()); 
        } 
 
        return result; 
    } 

2.

    private IEnumerable<string> GetObjectsStrings(List<object> input) 
    { 
        foreach (var item in input) 
        { 
            yield return item.ToString(); 
        } 
    } 

请您参考如下方法:

在场景 1 中,您正在处理整个列表,然后通过 IEnumerable 接口(interface)返回该列表。无论调用者打算对返回的 IEnumerable 做什么,每次调用 GetObjectsStrings 时都会处理整个列表。

在场景 2 中,您只处理调用者所需的 input 列表中的条目。所以,您正在创建一个迭代器。

这是一个会产生影响的例子:

var temp = GetObjectsStrings(input).First();

场景 1:您每次都为每个这样的调用完整地处理 input。 场景 2:您只处理 input 中的第一项。然后,迭代完成。