全局与非全局 Tcl proc 搜索、性能优缺点
global vs non global Tcl proc search, performance pro's and con's
假设我在 Tcl 中有一个 proc 名称 foo,在主命名空间中。
然后我创建一个命名空间 bar,并在其中调用 proc foo。现在,由于没有 foo::bar 过程,将调用全局过程。但是,我也可以通过调用 ::foo.
显式调用全局 foo 这两个选项是否有任何性能优势?这不是经验问题,而是更多的理解 proc 查找 table 应该如何工作
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
简而言之,在这个特定的测试中,我们看到调用之间在速度方面的差异在噪音中被降低了;我不相信上面的区别。
我建议编写清晰的代码,不要担心速度,除非你衡量一个问题。
假设我在 Tcl 中有一个 proc 名称 foo,在主命名空间中。
然后我创建一个命名空间 bar,并在其中调用 proc foo。现在,由于没有 foo::bar 过程,将调用全局过程。但是,我也可以通过调用 ::foo.
显式调用全局 foo 这两个选项是否有任何性能优势?这不是经验问题,而是更多的理解 proc 查找 table 应该如何工作
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
简而言之,在这个特定的测试中,我们看到调用之间在速度方面的差异在噪音中被降低了;我不相信上面的区别。
我建议编写清晰的代码,不要担心速度,除非你衡量一个问题。