コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】ログ出力を無効化する時に「logEnabledプロパティ」を使った場合と「Conditional属性」を使った場合の処理時間の検証

検証用スクリプト

using UnityEngine;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var count = 1000000;
        
        {
            Debug.logger.logEnabled = false;
            var startTime = Time.realtimeSinceStartup;
            for ( int i = 0; i < count; i++ )
            {
                Debug.Log( i );
            }
            var elapsedTime = Time.realtimeSinceStartup - startTime;
            Debug.logger.logEnabled = true;
            Debug.Log( elapsedTime );
        }
        
        {
            var startTime = Time.realtimeSinceStartup;
            for ( int i = 0; i < count; i++ )
            {
                Log( i );
            }
            var elapsedTime = Time.realtimeSinceStartup - startTime;
            Debug.Log( elapsedTime );
        }
    }
    
    [System.Diagnostics.Conditional( "DISABLE_RELEASE" )]
    private void Log( object message )
    {
        Debug.Log( message );
    }
}

検証結果

項目 処理時間
Debug.logger.logEnabled 0.13631110 秒
System.Diagnostics.Conditional 0.00304985 秒

まとめ

Conditional 属性は引数の評価がスキップされるため logEnabled プロパティよりも高速
リリース版のアプリでログ出力を無効化する場合は Conditional 属性の方が良い

関連記事