2011-03-19 37 views
0

直面语言不可知的问题。我一直这样做:访问局部变量比对象的属性更快吗?

myVar = myObj.myAttribute 

当我需要访问myAttribute很多。

我想知道这是否仅仅是我已经获得的迷信,或者如果它通常更快?

编辑:我也想知道,如果这

myVar = myObj.myAttribute/100 
for (i=0; i<100; i++) { 
    print myVar*i; 
} 

是不是把(myObj.myAttribute/100)在循环效率更高。现代编译器和解释器是否会检测到该部分的方程不会改变?

回答

1

在你做了什么,这种特殊情况下更有效,因为它是一个分工与100

我属性分配给变量只有我可以优化后完成的,操作就像在你的情况或需要多个电话到相同的属性和对象查找可能是昂贵的。一般来说,使用局部变量应该是更多的cpu wize方法,因为执行复杂的属性查找可能代价高昂,并且可以更好地控制该属性值,并在循环之前进行可能的预验证。也就是说,只有在函数调用可能发生一次或两次时,查找效率可能会很低,因此会增加开销并使代码更难跟进。

1

我想这可能取决于语言和/或编译器;但是,一般来说,代码越少,代码越快。

但差别不应该那么重要......最重要的是人们能够很容易地理解你的代码。


例如,在Javascript中,据说它使用局部变量更快,而不是重新计算对象访问多次。
即此:

var a = obj.a.b.c; 
a.a = 10; 
a.b = 20; 
a.c = 30: 

比速度更快:

obj.a.b.c.a = 10; 
obj.a.b.c.b = 20; 
obj.a.b.c.c = 30: 
1

作为一项规则,根据不同的语言,也许。

但是,您不太可能会注意到这种差异,除非您正在运行(例如)紧密循环。

通常我会说节省不值得程序员额外的认知负担。

但是,如果你有一些你知道有缓慢问题的代码,这种优化是绝对值得考虑的。