|
今作ってる「火の玉デモ」は一秒間に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 演算子」で調べると、目的にクラスの子クラスも判定してしまうからです。
このへんはヘルプに詳しく載ってますんで(逃げ)。と、早足でひとりでくっちゃべってしまいましたが、参考になれば幸いです。 注意としては、検索にも時間がかかるということ。もし検索にメモリの確保よりも 時間がかかりそうなら、素直にメモリ確保するべきです。でないとかえって遅くなります。 とはいえ、メモリの確保が頻繁に起こらなくなるので動作は安定します。 結局、どう使うかはプログラマ次第なので、使うならうまく使うようにしましょう。 |