我一直在for
挖掘ExpressionVisitor
,我发现了这个for (int i = 0, n = nodes.Count; i < n; i++)
{
Expression node = Visit(nodes[i]);
if (newNodes != null)
{
newNodes[i] = node;
}
else if (!object.ReferenceEquals(node, nodes[i]))
{
newNodes = new Expression[n];
for (int j = 0; j < i; j++)
{
newNodes[j] = nodes[j];
}
newNodes[i] = node;
}
}
循环,
i = 0, n = nodes.Count; i < n
现在有什么特别的原因:i = 0; i < nodes.Count
?
是否有任何性能增益不在{{1}}?
答案 0 :(得分:11)
最佳做法是在多次使用同一语句时使用变量。
这里,nodes.Count
在以下两个地方使用,因此,使用变量而不是两次执行相同的语句。
for (int i = 0, n = nodes.Count; i < n; i++) {
和
newNodes = new Expression[n];
注意:正如评论中所讨论的那样,性能差异完全可以忽略不计。
答案 1 :(得分:2)
在这种情况下,我认为它没有任何太大的性能影响。但正如他们使用此n
一样,这一行也是
newNodes = new Expression[n];
所以,
node.Count
一次。n
无需再次分配。这就是它的全部内容。