您能否解释一下示例 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(); } }
2 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
在场景 1 中,您正在处理整个列表,然后通过IEnumerable
接口返回该列表。无论调用者打算如何处理返回IEnumerable
的 ,每次GetObjectsStrings
调用时都会处理整个列表。
在场景 2 中,您只处理input
调用者所需的列表中的条目。所以,你正在创建一个迭代器。
这是一个会有所作为的示例:
var temp = GetObjectsStrings(input).First();
场景 1:您input
每次都对每个此类调用进行完整处理。场景 2:您只处理 中的第一项input
。然后,迭代完成。
梦里花落0921
TA贡献1772条经验 获得超6个赞
他们做的事情不同,所以肯定会有区别。
第一个是创建一个新列表,其中包含ToString
现有列表中项目的版本,然后返回该新列表。
第二个是遍历现有列表,并返回ToString
版本,而不制作任何副本。
2 是最有效的(在速度和内存使用方面),因为没有新列表正在制作或任何东西的副本。
- 2 回答
- 0 关注
- 79 浏览
添加回答
举报
0/150
提交
取消