繁体   English   中英

集合和迭代器的C#性能

[英]C# Performance with collections and iterators

您能否解释示例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接口返回该列表。 无论调用者打算如何处理返回的IEnumerable ,每次调用GetObjectsStrings都会处理整个列表。

在方案2中,仅处理input列表中调用者所需的条目。 因此,您正在创建一个迭代器。

这是一个可以发挥作用的示例:

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

方案1:您每次都完全为每个此类调用处理input 方案2:您只处理input中的第一项。 然后,迭代完成。

他们做不同的事情,所以肯定会有区别。

第一个是创建一个新列表,其中包含现有列表中项目的ToString版本,然后返回该新列表。

第二个是迭代现有List,并返回ToString版本,而不进行任何复制。

2是最有效的(就速度和内存使用而言),因为没有新的列表正在生成或复制任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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