gpt4 book ai didi

c# - 数据对象属性的最佳实践 : IEnumerable vs Array

转载 作者:行者123 更新时间:2023-11-30 12:44:03 25 4
gpt4 key购买 nike

<分区>

简短的问题:将data-object 属性声明为IEnumerable 是否可以? , 或者它应该是 Array相反?

背景:

我刚刚在我们的项目中发现了一个导致性能问题的错误。原因是 IEnumerable 已经迭代了多次。但它只是乍一看很简单。我认为那里存在设计缺陷,导致了这种情况的发生。

更深入的调查表明,一种方法 GetAllUsers返回了 UsersResponse对象,其属性之一是 IEnumerable<T> UsersList .实现缓存时,显然整个 UsersResponse对象正在被缓存,当时它工作正常,因为 GetAllUsers分配一个数组给 IEnumerable<T> UsersList .稍后执行 GetAllUsers已经改变,出于某种原因,开发人员决定 ToArray()调用是多余的。所以我认为问题是 UsersResponse object 没有很好的设计,并且允许它的工厂方法有太多的自由。另一方面,缓存包含 IEnumerable 的对象属性在原则上也是无用的。

所以我们回到我的一般设计数据对象的问题:当你声明它时,不知道它是否会在未来某个时间被缓存或者它会如何以除你当前需要之外的其他方式使用,是吗?可以将其属性声明为 IEnumerable , 将谨慎使用的责任推给其他开发人员,否则必须是 Array从一开始?

我搜索过的内容:

我找到的唯一建议是 Jon Wagner's blog post他建议在构建 LINQ 链后立即“密封”它们。但这更多地涉及构建 IEnumerable 而不是将其存储在实体属性中。虽然与返回尽可能特定类型的原则相结合,但它可能意味着将属性声明为 Array。 .

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com