请忽略这个问题中的代码可读性。
就性能而言,以下代码应该像这样编写:
int maxResults = criteria.MaxResults;
if (maxResults > 0)
{
while (accounts.Count > maxResults)
accounts.RemoveAt(maxResults);
}
或者像这样:
if (criteria.MaxResults > 0)
{
while (accounts.Count > criteria.MaxResults)
accounts.RemoveAt(criteria.MaxResults);
}
编辑:criteria
是一个类,MaxResults
是一个简单的整数属性(即public int MaxResults { get { return _maxResults; } }
)。
C# 编译器会把 MaxResults
当作黑盒计算每次调用吗?还是它足够聪明,在 3 次调用同一属性且没有在调用之间修改该属性的情况下找出来了?如果 MaxResults
是字段呢?
优化法则之一是预计算,所以我本能地按照第一个示例编写了此代码,但我想知道是否有人自动为我执行此类操作(再次忽略代码可读性)。
(注意:我不想听到“微优化”论点,在我发布的特定情况下可能有效。我只想知道发生或未发生的事情背后的理论。)
MaxResults
恰好为零时,我需要排除移除逻辑。 - Jon Seigel