我是否必须像下面那样优化我的FOR循环,否则编译器会为我做这个?
//this is slow, right?
for (int i = 0; i < menuItem.DropDownItems.Count; i++)
{
...
}
//this should be much faster right?
for (int i = 0, count = menuItem.DropDownItems.Count; i < count; i++)
{
...
}
PS。我打赌这已经发布了,但我没有发现任何内容,抱歉可能有重复。
PPS。对不起,我编写了很多JavaScript代码 - 我们必须考虑这些优化......在.net世界中可能看起来很荒谬。
答案 0 :(得分:20)
嗯,这取决于DropDownItems.Count
的实现方式 - 但坦率地说,可能是一个简单的字段支持的属性...这将使第一个代码与第二,但很多更具可读性。
在可能性的基础上,首先选择foreach
循环,然后再考虑可读性。
即使你做想要使用临时变量,我也会保持for
循环本身简单,将计数提升到单独的变量。不可否认,这意味着范围更广,但更简单:
int count = menuItem.DropDownItems.Count;
for (int i = 0; i < count; i++)
{
...
}
但这只是个人偏好。
答案 1 :(得分:0)
...
部分是什么?在任何这类问题中,我的第一反应就是问“在这种情况下它是否重要?”表现总是相对的。如果确切的代码行在堆栈上或在其末尾超过10%的时间,那么值得担心,这通常是不太可能的。