预期TCL:UPVAR与名称空间可变性能



通过规格/实现,访问命名空间变量与upvar之间的差异是否有预期。我必须使用呼叫函数。我不能仅仅通过一个论点。从经验上,Upvar获胜。但是在所有合理情况下,这是期望的吗?谢谢。

是的。完全范围的参考比upvar参考快于variable参考。

找出命令"时间"是您的朋友:

namespace eval toto {
    proc cb_upvar {varname} {
        upvar $varname var
        incr var
    }
    proc cb_scoped {varname} {
        incr $varname
    }
    proc cb_variable {varname} {
        variable $varname
        incr $varname
    }
}
proc benchmark {cmd} {
    set toto::totovar 1
    time $cmd 100
    puts -nonewline "[lindex $cmd 0] =>t"
    puts [time $cmd 20000000]
}
puts [info tclversion]
benchmark {toto::cb_scoped ::toto::totovar}
benchmark {toto::cb_variable totovar}
benchmark {toto::cb_upvar totovar}

输出:

toto::cb_scoped =>    0.47478505 microseconds per iteration
toto::cb_variable =>  0.7644891 microseconds per iteration
toto::cb_upvar =>     0.6046395 microseconds per iteration

rem:要获得一致的结果需要大量迭代。

最新更新