優化Hypermesh指令碼效能的幾點建議

2021-10-24 21:26:03 字數 2069 閱讀 4767

以下給出幾種優化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格式化統計資訊,並根據需要做排序分析...