今作ってる「火の玉デモ」は一秒間に50回、2個のオブジェクトを作ります、
つまり、秒間100個のオブジェクトを作っているわけです。なんか、これって結構
重そうなので、高速化してみない?って話になりました。
高速化の方法はいたってシンプルです。 流れとしては、次のようになります。
1.オブジェクトを作っておく オブジェクトを使いたいときは次のようになります。
1.リストの中に使いたいオブジェクトが存在するかを検索
今回やってみたやつのクラス構成は以下のとおりです。 function FindObject(AClassName:TClass):TObject; var i:Integer; object:TObject; begin result:=nil; //とりあえず見つからなかったことにしておく //リストに入っているオブジェクトを調べる for i:= 0 to List.Count-1 do begin object:=List[i]; if object.ClassName = AClassName.ClassName then begin //発見!! result:=object; end; end; end;こんな感じですかね。なぜ、文字列で調べてるかっていうと、 「is 演算子」で調べると、目的にクラスの子クラスも判定してしまうからです。 このへんはヘルプに詳しく載ってますんで(逃げ)。 と、早足でひとりでくっちゃべってしまいましたが、参考になれば幸いです。 注意としては、検索にも時間がかかるということ。もし検索にメモリの確保よりも 時間がかかりそうなら、素直にメモリ確保するべきです。でないとかえって遅くなります。 とはいえ、メモリの確保が頻繁に起こらなくなるので動作は安定します。 結局、どう使うかはプログラマ次第なので、使うならうまく使うようにしましょう。 |