以下給出幾種優化hypermesh二次開發tcl指令碼的效能的方法。
注意:下面列出的時間是在一台奔騰266mhz的計算機上使用10000次迭代的tcl命令執行時間。過程(proc)中定義的變數預設為區域性變數。有許多方法可以訪問過程作用範圍之外的變數,包括使用命令global,upvar,uplevel和使用全域性命名空間引用符::。
命令時間消耗
uplevel 含level
每次迭代花費66微秒
uplevel
每次迭代花費55微秒
upvar
每次迭代花費55微秒
global
每次迭代花費60微秒
全域性命名空間引用符::
每次迭代花費55微秒
區域性變數
每次迭代花費39微秒
在整數加/減時,從變數中加上或減去乙個值時,請使用incr
命令,而不要使用expr
呼叫。
命令時間消耗
expr
每次迭代花費55微秒
incr:
每次迭代花費11微秒
相差5.0倍
使用expr
命令時,用**大括號{}**將表示式括起來,以利用位元組碼編譯的優勢。
方法時間消耗
不使用大括號
每次迭代花費143微秒
使用大括號
每次迭代花費55微秒
相差2.60倍
盡可能避免在過程(proc)中使用return
函式。將變數設定為要返回的值,然後在過程底部(最後一行)呼叫set varname
會更有效。
命令時間消耗
return
每次迭代花費39微秒
set每次迭代花費5微秒
相差7.80倍
解析列表的內容時,最快的方法是使用foreach
命令。其次是使用帶有遞減索引測試的while
迴圈,而效率最低的方法是使用for
迴圈。
命令時間消耗
for每次迭代花費159微秒
while
每次迭代花費115微秒
foreach
每次迭代花費66微秒
初始化全域性變數時,請將它們放在過程(proc)中,然後在全域性命名空間中訪問它們以利用位元組碼編譯的優勢。
命令時間消耗
內聯(inline)初始化
花費110000毫秒
proc中初始化
花費50000毫秒
對於大型列表搜尋,使用陣列可能更有效。列表搜尋是順序搜尋,對於大型列表可能不是很有效。不用將專案新增到列表中,而是將陣列的索引設定為專案名稱。
set a "1 2 3 4 5 6 7 8 9 0";
if
set a(1) 1;
set a(2) 2;
…set a(9) 9;
set a(0) 0;
if
對於排序列表,根據列表型別,使用-sorted
選項以及-ascii,-decreasing,-dictionary,-inreasing,-integer
或-real
等引數可能更有效。
以下示例顯示了對全域性列表中的數字的求和過程,並結合了上面討論的一些效能優化方法。
set vals ;
proc sum {}
return $sum;
}proc fastersum {}
set sum;
}
sum過程函式花費: 829ms
fastersum過程函式花費: 83ms
兩者相差: 9.99倍
JavaScript網頁指令碼效能優化
訪問dom的方式對指令碼效能會產生非常大的影響。以下面 為例 if document.getelementsbytagname a length 0 這段 可以執行,本身並沒有什麼問題,但它卻不是我們期望的最優性能。細看這段 可以發現其先後兩次使用dom方法getelementsbytagname ...
Python指令碼效能分析
來自 def foo sum 0 for i in range 10000 sum i suma bar sumb bar return sum defbar sum 0 for i in range 100000 sum i return sum if name main import cprof...
python指令碼效能分析
在進行python開發時需要對python指令碼的效能分析,以便對python指令碼進行優化,下面使用cprofile和 pstats對python指令碼效能分析。cprofile思路 1.使用cprofile模組生成指令碼執行的統計資訊檔案 2.使用pstats格式化統計資訊,並根據需要做排序分析...