为啥“返回数组的属性容易导致代码效率低下”?

Posted

技术标签:

【中文标题】为啥“返回数组的属性容易导致代码效率低下”?【英文标题】:Why "Properties that return arrays are prone to code inefficiencies"?为什么“返回数组的属性容易导致代码效率低下”? 【发布时间】:2010-07-24 06:18:22 【问题描述】:

我有一段代码处理存储在数据库中的客户。有一个对象Customer,除此之外,它还有两个byte[] 类型的属性:一个属性用于密码盐,第二个属性用于密码哈希。

使用 FxCop 检查代码,我发现它抱怨(CA1819性能规则):

“返回数组的属性容易导致代码效率低下。考虑使用集合或将其作为方法。有关更多信息,请参阅设计指南。”

并建议:

“更改 'Customer.PasswordHash' 以返回集合或使其成为方法。”

我不太明白,我在做什么代码效率低下是怎么回事?

【问题讨论】:

【参考方案1】:

问题在于数组总是是可变的。这意味着您不能在没有任何一个的情况下从方法中返回一个:

允许调用者弄乱你的内部状态 先创建副本

如果您使用集合,则可以改为围绕真实集合创建一个只读包装器,然后将其返回 - 这样会便宜得多。或者,如果您将其更改为可以降低预期调用速度的方法。

当然,如果您对调用者更改您的数据感到满意,那么数组将可以正常工作...

【讨论】:

以上是关于为啥“返回数组的属性容易导致代码效率低下”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥选择单个属性返回的行数少于选择 Oracle SQL 中的所有列

为啥这个数独求解器返回相同的板而不解决任何问题?

当我已经使用游标时,为啥我得到“精确提取返回的行数超过请求的行数”?

ibatis中sqlmapExecutor.executeBatch()怎么返回成功的记录数为啥总是返回0 求大神

为啥我不能将数字转换为双精度数?

为啥返回 org.h2.jdbc.JdbcSQLException?