とあるRailsのコードがえらく遅く,OSが不安定になるので,プロファイルをかけてみたところ下記の1行のコードが原因であることがわかった.
unit[@ar_object.id] = some_array
悩むこと10分.やっとわかった.
分かった人はわかったと思いますが,答えはCMのあと!
...
...
...
...
...
...
...
...
...
...
もまってられないので,タネあかしをすると上記変数「unit」はHashではなくArrayで
@ar_object.idが30万くらいのFixnumを返していたのが原因でした.
蛇足ながら解説すると「unit」は配列のため,上記1行を実行した時点で30万個の
要素をもつ配列ができてしまい,メモリ不足でOSが不安定になったというオチでした.
またrubyでは配列要素とHash要素のアクセサはともに「[]」なわけですが,fixnumで
アクセスしようとしていたため,機能としては正しく動いていたようです.
JavaScriptなどだとこれで遅くなることはないようですが,Rubyは律義に配列領域を
確保するんですね.気をつけましょう.
(おしまい)