集合和迭代器的 C# 性能

您能否解释一下示例 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();

        }

    }


慕婉清6462132
浏览 81回答 2
2回答

慕田峪9158850

在场景 1 中,您正在处理整个列表,然后通过IEnumerable接口返回该列表。无论调用者打算如何处理返回IEnumerable的 ,每次GetObjectsStrings调用时都会处理整个列表。在场景 2 中,您只处理input调用者所需的列表中的条目。所以,你正在创建一个迭代器。这是一个会有所作为的示例:var temp = GetObjectsStrings(input).First();场景 1:您input每次都对每个此类调用进行完整处理。场景 2:您只处理 中的第一项input。然后,迭代完成。

梦里花落0921

他们做的事情不同,所以肯定会有区别。第一个是创建一个新列表,其中包含ToString现有列表中项目的版本,然后返回该新列表。第二个是遍历现有列表,并返回ToString版本,而不制作任何副本。2 是最有效的(在速度和内存使用方面),因为没有新列表正在制作或任何东西的副本。
打开App,查看更多内容
随时随地看视频慕课网APP