一个关于for循环的快速简单的问题.
情况 当我突然想知道for循环实际上是如何表现时,我正在编写一些高性能代码.我知道我之前偶然发现了这一点,但不能为我的生活再次找到这个信息:/
不过,我主要担心的是限制器.说我们有:
for(int i = 0; i < something.awesome; i++)
{
// Do cool stuff
}
Run Code Online (Sandbox Code Playgroud)
问题 是something.awesome存储为内部变量还是循环不断检索某些东西.是否进行逻辑检查?我问的原因当然是因为我需要遍历很多索引的东西而且我真的不希望每次传递都有额外的函数调用开销.
然而,如果something.awesome只被召唤一次,那么我会回到我快乐的摇滚之下!:)
我知道在下面的代码数组'Length'属性不会在每次循环迭代时被调用,因为Jit编译器足够聪明地将它识别为属性(而不是方法)并优化代码只在内部存储临时值时调用它变量:
Int32[] myArr = new Int32[100];
for(Int32 index = 0; index < myArr.Length; index++) {
// Do something with the current item
}
Run Code Online (Sandbox Code Playgroud)
因此,开发人员无需通过将长度缓存到局部变量来尝试优化它.我的问题:.Net中的所有集合类型都是如此吗?例如,假设我有一个List并在for循环中调用'Count'属性.我不应该优化这个吗?