2009年6月23日火曜日

JavaScriptメモリ不足

最近書いたGreasemonkeyのスクリプトがメモリ不足を示すエラーで動かなくなってしまった。
エラー内容は以下のとおり

エラー: Component returned failure code: 0x8007000e (NS_ERROR_OUT_OF_MEMORY) [nsIXPCComponents_Utils.evalInSandbox]

そんなにたいしたことしていないコードなのになんでだろうって思って調べたら、どうもArrayのsort関数で死亡してるらしい。そこで原因判明
この配列ID値を連想配列のように使っていて if(id in array) みたいな書き方をしてたんだけど、このidが別に1から振られてる感じじゃなかったので array[2034857103] = "hoge"; みたいな使われ方をしててどうも0~2034857102までの配列が内部的に生成されてしまってたみたい。
それをソートしようとするものだから膨大なメモリが使われちゃったのかな?
idを["id"] = id; として連想配列にして格納するようにしたらすんなり動きました。使い慣れてない言語はこういうトラップにはまる

0 件のコメント: