我知道,在下面的代码数组中,不是在每次循环迭代中都调用“Length”属性,因为Jit编译器足够聪明地将其识别为属性(而不是方法),并优化代码,使其只在内部存储临时变量中的值一次:
Int32[] myArr = new Int32[100];
for(Int32 index = 0; index < myArr.Length; index++) {
// Do something with the current item
}
因此,开发人员没有必要试图通过将长度缓存到局部变量来优化这一点。我的问题是:对于.Net中的所有集合类型都是正确的吗?例如,假设我有一个List并在For循环中
我正在将语言的编译器优化为JavaScript,并发现了一个非常有趣(如果不是令人沮丧的话)的情况:
function add(n,m) {
return n === 0 ? m : add(n - 1, m) + 1;
};
var s = 0;
for (var i = 0; i < 100000; ++i) {
s += add(4000, 4000);
}
console.log(s);
2.3s需要在我的machine1上完成。但如果我做一个很小的改变:
function add(n,m) {
return (() => n === 0 ? m : add(n