for-loop optimization – 需要与否?

我是否必须像下面那样优化我的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-world中可能看起来很荒谬。

嗯,这取决于DropDownItems.Count的实现方式 – 但坦率地说,它可能是一个简单的字段支持的属性……这将使第一个代码与第二个代码一样快,但更具可读性。

首先是可读性 – 然后仅在必要时测量性能和微观优化。

在可能的情况下,尽可能地选择foreach循环开始……

即使你确实想要使用临时变量,我也会保持for循环本身的简单,将计数提升到单独的变量。 不可否认,这意味着范围更广,但更简单:

 int count = menuItem.DropDownItems.Count; for (int i = 0; i < count; i++) { ... } 

尽管如此,这只是个人偏好。

什么是...部分? 在任何这类问题中,我的第一反应就是问“在这种情况下它是否重要?” 表现总是相对的。 如果确切的代码行在堆栈上或在其末尾超过10%的时间,那么值得担心,这通常是不太可能的。