*

[Unity]GameObject.Findは遅い

公開日: : C#, Unity

遅いらしいです。
なので、マネージャークラスを作りましょう、というのが風潮らしいです。
マネージャークラスはそれぞれある程度のまとまりで作るべきでしょうが、愚直にGameObject.Find系を早くしてみます。

まずManagerクラスを作るとして、何がどうして遅いのかを調べることに。

とりあえず以下ソースで1000個ほどGameObjectを生成して、GameObject.Find(string name)を使った三通りの検索を10万回ほど行います。
検索しているのは以下の三種。
・先頭の要素
・最後の要素
・存在しない要素

で、この結果は

結果を見る限り、先頭が早くて最後が遅い。存在しないときにも時間がかかっているということは、順次探索をしているのでしょう。

というMethod名を見る限り、GameObject.nameのプロパティをキーにして検索しているっぽいので、それを前提にManagerクラスを作ります。
Managerクラスは順次探索でなく、nameをキーにしてマッピングするようにします。

こんなところでしょうか。
最初の計測用と同様にこのマネージャークラスを利用するようにして計測してみます。

結果は以下

GameObject.Find(string name) はかなり改善ができました。
TypeやTagも同様にDictionaryを生成してそれぞれで管理させれば早くなりそうな気がします。
生成のときにManager登録を行うので、通常のインスタンス化よりは遅くなります。
とはいえ、普通に考えれば生成と参照では、参照のほうが頻繁にあるはずですが、あまりに頻繁に生成されるGameObjectなら登録しないほうがよいかもしれません(毎フレーム1000個もObjectを生成するような状況が思いつかないけど)

ad

関連記事

Unity_

[Unity]Unity4.6 UIチュートリアル Lesson6.UI Events and Event Triggers 日本語要約

前回の続き。 ついにずっと画面で見えていた謎のEventSystemに触れます。 なんか

記事を読む

unity ご祝儀

[Unity?]割り切れない関係のためのご祝儀計算シミュレータ

今日、親友が結婚します。 なので、ご祝儀を用意するんですが、相場は3万円ですね。 じゃあ、な

記事を読む

logo

[C#]AS400をDBに見立ててPCのPGMからODBC接続する

◆前提条件◆ PCにClient Accessがインストールされている。 PCに.NET Fra

記事を読む

Wannabenote

[Unity]Unity4.6 UIチュートリアル Lesson7.UI Slider 日本語要約

Unityまとめページはこちら。 前回の続き。 今回はスライダーコントロールについてです

記事を読む

Unity2_1

[Unity]Unity2Dチュートリアル スプライトを利用する

前回の続き。 早速、スプライトを設置して作っていきましょう。 ※スプライトとは スプライ

記事を読む

logo

[C#]文字列のプロパティを初期化したい。空文字で初期化したい。

Twitterで適当に叫んでたときのネタをメモ。 C#でプロパティの初期化が面倒です。 たと

記事を読む

logo

[C#, Generic]UnityのAddComponentとかなんとかComponentを実装してみる

UnityのAddComponentってありますよね。 みたいなやつ。 このジェネリクスの

記事を読む

Unity_

[Unity]Unity2Dでパズドラのようにタイルを動かす

今回からスクリプトがかなり難しくなってくるかも。 前回の続き。 というわけで前回はドラッグで

記事を読む

wannabenote

[C#, Excel]最終行を取得する

Excelを触っているのでC#でExcelネタが続きます。 Excelの行数が知りたい Exce

記事を読む

Registry レジストリ C# .NET

[.NET, C#]レジストリの値が取得できない原因

正しいPathを指定しているのに 図のような 'HKEY_CURRENT_MACHINE\SO

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑