*

[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]コードリファレンス GameObjectを親子関係にする。

親子関係にして、親が動いたら子も動くような動きをさせます。 transform.parentプ

記事を読む

logo

[Unity]コードリファレンス ソケット通信の開始して接続して切断する。

オンラインゲームを作るためにはソケット通信が必要です。 今回はいきなりソースから。解説は下の方に。

記事を読む

Unity_

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

昨日、適当なリリースのTOPページの要約しただけで、ここにたどり着くワードがUnity4.6だらけに

記事を読む

Unity_

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

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

記事を読む

Excel vsto 印刷設定 print setting

[C#, VSTO]Excelの印刷設定をする

印刷設定 VSTO(Visual Studio Tool for Office)Excelなんぞを

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 番外編 これパズドラじゃなくね?

前回の続き。 パズドラみたく直線で3つ以上連なっているときに消したいんです。 そして、何を勘

記事を読む

logo

[iTextSharp,C#]TifファイルをPDFに変換する。

TifファイルをPDFに変換してほしいと言われて作ったときのソースのメイン部分を抜粋です。 確

記事を読む

addcomp

[Unity]コードリファレンス コンポーネントをアタッチする。

コンポーネントをプログラム実行時に追加します。 AddComponent() AddComp

記事を読む

Wannabenote

[Unity]Unity2Dチュートリアル 繰り返しパズルを消す その2

Unityまとめページはこちら。 前回の続き。 準備が出来たので、ソースを変更致しましょ

記事を読む

PDFClearBlankToText

[C#, iTextsharp]PDFClearBlankToText PDFのテキストを読み込んで空白削除する

使用は自己責任でお願いします。 ◆概要 前回のBlankClearのあとにPDFからコピペが

記事を読む

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 ↑