告知欄です
1- レス

旧雑記サルベージ


[39]管理人 ★:06/09/06 17:18 ID:???
2004年10月26日
■AutoHotkeyのパフォーマンス2
メモリ使用量を調べてみる。
1万個の変数を動的に作成し、メモリ使用量と処理時間を調べる。
SetBatchLines,-1
s=0
c=%A_TickCount%
Loop,10000
v%A_Index%=%A_Index%
t=%A_TickCount%
t-=%c%
MsgBox,%t%
ループを実行した場合、2843ミリ秒の時間がかかり、メモリ使用量は1MBほど増えた。
変数1つ100バイトくらいか?
メモリを確保するのには結構時間がかかるらしい。
変数に空の値を代入するようにしたら、メモリ使用量の増分は300KBくらいになった。
DMonkey
w32=new Win32;
a=new Array;
s=0;
c=w32.getTickCount();
for(i=1;i
3078ミリ秒で、172MBほど増える。
オブジェクトはかなりメモリを食うようだ。
new String(i)をi.toString(10)とすると、500KBくらいしか増えなかった。
代入する値をnullにすると300KBくらい。
UWSC
DEF_DLL GetTickCount():long:kernel32
Dim a[10000]
c=GetTickCount()
for i=1 to 10000
    a[i]=""+i
next
msgbox(GetTickCount()-c)
438ミリ秒。配列は最初に宣言するため、速い。
メモリは400KBほど増える。
代入する値を空の文字列にしても同じくらい。

次に、巨大なスクリプトを読み込ませてみる。
DMonkeyの連番展開スクリプトを用いる。
AutoHotkey
v=[0-1000]
MsgBox,aaa
展開部分のコードを抜かしたときと比べ、300KBほど増える。
なお、1001行の後に昨日の60000回足すスクリプトを実行してみたが、実行時間に差は無かった。
DMonkey
a=[0-1000];
alert('aaa');300KBほどの増加。
UWSC
a=[0-1000]
msgbox("")100KBほど増える。

そんなわけで、たくさん変数を作ったり、長いスクリプトを常駐させても、現実的にはメモリ消費量が増えすぎて困るということはなさそうだ。
ただ、StringSplitコマンドで行数の多い文字列を分割すると、大量に変数が作られてしまうので、常駐スクリプトではこのコマンドの使用は避けたほうがいいだろう。


名前

E-mail



0ch BBS 2005-10-08