Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

this.transformを計測してみた

More than 3 years have passed since last update.

this.transformがGetComponentを行なっており重いと聞いたので、実際に計測してみた

テストした際のスクリプト

// キャッシュしたtransformを取得するプロパティ
protected Transform mTrans;
public Transform cachedTransform { get { if (mTrans == null)        mTrans = transform; return mTrans; } }
public Transform cachedTransform2 { get { return mTrans; } }

// 01   普通にtransformを取得
for (int i = 0; i < number_of_tests; i++)
{
    Transform test = this.transform;
    //yield return 0;
}

// 02   キャッシュしておくプロパティから取得
for (int i = 0; i < number_of_tests; i++)
{
    Transform test = this.cachedTransform;
    //yield return 0;
}

// 03   ローカル変数にキャッシュしてそれを参照する
Transform cache = this.transform;
for (int i = 0; i < number_of_tests; i++)
{
    Transform test = cache;
    //yield return 0;
}

// 04   cachedTransformプロパティ内の処理を抜き出した版(プロパティのオーバーヘッドをみてみた)
mTrans = null;
for (int i = 0; i < number_of_tests; i++)
{
    if (mTrans == null)
        mTrans = transform;
    Transform test = mTrans;
    //yield return 0;
}

// 05   cachedTransformのifで存在チェックをしない版(プロパティ内の処理負荷の違いをみてみた)
mTrans = this.transform;
for (int i = 0; i < number_of_tests; i++)
{
    Transform test = cachedTransform2;
    //yield return 0;
}

計測結果

number_of_tests = 100

00: 0.01573563(ms)
01: 0.08511543(ms)
02: 0.005483627(ms)
03: 0.010252(ms)
04: 0.03743172(ms)

number_of_tests = 1000

00: 0.1368523(ms)
01: 0.223875(ms)
02: 0.1990795(ms)
03: 0.1330376(ms)
04: 0.1192093(ms)

number_of_tests = 100(yield return あり)

00: 0.1575947(ms)
01: 0.3004074(ms)
02: 0.01096725(ms)
03: 0.09155273(ms)
04: 0.1583099(ms)

number_of_tests = 1000(yield return あり)

00: 1.351833(ms)
01: 0.9250641(ms)
02: 0.05340576(ms)
03: 0.6370544(ms)
04: 0.4959106(ms)

計測してみて

・メモリキャッシュにのっている状態であれば、this.transformでもそこそこ早いがローカル変数にキャッシュした方が無難

・ローカル変数でも、キャッシュから外れると重い

・プロパティでもオーバーヘッドが重いようなので、変数にキャッシュしておいた方が軽い

cachedTransformとローカル変数にキャッシュしたものを使うのを場合によって併用するのが作りやすそうか

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away