【发布时间】:2016-02-10 13:58:23
【问题描述】:
假设我在 Tcl 中有一个 proc 名称 foo,在主命名空间中。
然后我创建一个命名空间 bar,并在其中调用 proc foo。现在,由于没有 foo::bar proc,所以将调用全局的。但是,我也可以通过调用 ::foo 显式调用全局 foo。
这两个选项是否应该有任何性能优势?这不是经验问题,而是更多地了解 proc 查找表应该如何工作
【问题讨论】:
标签: performance tcl proc
假设我在 Tcl 中有一个 proc 名称 foo,在主命名空间中。
然后我创建一个命名空间 bar,并在其中调用 proc foo。现在,由于没有 foo::bar proc,所以将调用全局的。但是,我也可以通过调用 ::foo 显式调用全局 foo。
这两个选项是否应该有任何性能优势?这不是经验问题,而是更多地了解 proc 查找表应该如何工作
【问题讨论】:
标签: performance tcl proc
Tcl 对这些类型的查找进行了相当广泛的缓存,因此抽象地准确预测性能发生了什么是很尴尬的。相反,最好是测试!这是在我的笔记本电脑上使用 Tcl 8.6 完成的……
% proc foo {} {expr 123}
% time { foo } 100000
0.36416123 microseconds per iteration
% namespace eval bar { time { foo } 100000 }
0.36913464 microseconds per iteration
% namespace eval bar { time { ::foo } 100000 }
0.36198978000000004 microseconds per iteration
简而言之,在这个特定的测试中,我们看到呼叫之间在速度方面的差异在噪音方面有所下降;我不相信上面的区别。
我建议编写清晰的代码,除非你衡量一个问题,否则不要担心速度。
【讨论】: