Wenn Sie in einem Verfahren sind, ist der schnellste Weg global
, variable
, upvar
oder namespace upvar
abzubilden den Namespace-Variable als lokale Variable zu verwenden. Zumindest ist es am schnellsten, wenn Sie die Variable mehr als einmal aufrufen (lesen oder schreiben); Die genaue Wahl, welche der oben genannten Befehle zu verwenden ist, hängt davon ab, was Sie tun, und in einigen Fällen kann ein großer Unterschied zur Geschwindigkeit machen, aber für konstante Variablennamen spielt es keine Rolle. Gleiches gilt auch für Lambda-Terme oder Klassenmethoden; Es ist derselbe zugrunde liegende Mechanismus.
Wenn Sie außerhalb einer Prozedur nicht bereits im Namespace ausgeführt werden, von dem die Variable stammt, ist der schnellste Zugriff wahrscheinlich der vollständig qualifizierte Name. (Tcl speichert den Parse des Namens in der internen Repräsentation des Namens, was die Dinge ein wenig beschleunigen wird.) Andererseits, wenn es eine Variable im aktuellen Namespace ist, dann könnte die Verwendung des unqualifizierten Namens etwas schneller sein . Vorausgesetzt, Sie haben die Variable mit dem Befehl variable
(für andere Namespaces als ::
) deklariert, um Probleme mit dem Variablen-Resolver zu vermeiden.
Insgesamt, anstatt nur hier zu fragen, können Sie es selbst herausfinden. Der time
Befehl macht das Testen sehr einfach:
% 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
Sie mit Ihre Code überprüfen sollten; gehe nicht davon aus, dass meine Zeit und deine die gleichen sind.
http://StackOverflow.com/a/37296301/974155 – Dinesh
Ähnliche Frage, aber nicht das Gleiche. 1 ruft einen proc auf, der eine Variable verwendet, nicht global. – user1134991