2016-07-27 120 views
0

我在TCL中有SW。 我需要在不同的命名空間中設置和/或查詢變量。 我應該使用(用於exampele):在TCL中訪問命名空間變量的最快方法

global ::namespace1::varname1 
set ::namespace1::varname1 $val 
##more code to access/write into a variable 

或者我應該用程序來實現相同的,例如?

namespace1::setVarname1 $val 
namespace1::getVarname1 

哪種查找速度更快?第二種方法絕對安全。
我們使用的是TCL 8.5,並且將來會升級到Tcl 8.6
謝謝。

+0

http://stackoverflow.com/a/372​​96301/974155 – Dinesh

+0

類似的問題,但不一樣。 1正在調用使用變量的proc,而不是全局變量。 – user1134991

回答

1

如果你是在一個過程中,最快的方式是使用globalvariableupvarnamespace upvar命名空間變量映射爲一個局部變量。或者至少如果您不止一次訪問(讀取或寫入)變量,速度最快;上面哪個命令的確切選擇取決於你在做什麼,在某些情況下可以對速度產生很大的影響,但對於常量變量名稱,它並不重要。這同樣適用於lambda術語或類方法;它是相同的底層機制。

在過程之外,如果您尚未在變量來自的名稱空間中執行,則最快的訪問方式可能是使用完全限定名稱。 (Tcl會將該名稱的解析緩存在名稱的內部表示中,這會加快處理速度)另一方面,如果它是當前名稱空間中的變量,那麼使用非限定名稱可能會稍微快一點。假設您使用variable命令(對於除::以外的名稱空間)聲明變量以防止變量解析器出現任何問題。

總的來說,而不只是問在這裏你可以找到自己。該time命令使得測試非常簡單:

% info patch 
8.5.9 
% set x 1 
1 
% time {incr x} 10000 
0.3075357 microseconds per iteration 
% time {incr ::x} 10000 
0.3728569 microseconds per iteration 

你應該和你的代碼檢查;不要以爲我的時間和你的時間是一樣的。