はじめに
- Unity では Debug.Log する時にスタックトレースの情報も出力するかどうか設定できる
- エディタの Project Settings > Player > Other Settings から設定可能
- エディタ拡張のスクリプトから PlayerSettings.SetStackTraceLogType で設定可能
- ランタイムのスクリプトから Application.SetStackTraceLogType で設定可能
- Debug.Log でスタックトレースを表示するかどうかでどのくらい
GC Alloc や処理時間が変わるか1フレームに1万回 Debug.Log して検証
検証用スクリプト
using UnityEngine;
using UnityEngine.Profiling;
public class Example : MonoBehaviour
{
public int m_count = 10000;
private void Update()
{
if ( Input.GetKeyDown( KeyCode.Space ) )
{
{
Application.SetStackTraceLogType
(
LogType.Log,
StackTraceLogType.ScriptOnly
);
var sampler = CustomSampler.Create( "# スタックトレースあり" );
sampler.Begin();
for ( int i = 0; i < m_count; i++ )
{
Debug.Log( "ピカチュウ" );
}
sampler.End();
}
{
Application.SetStackTraceLogType
(
LogType.Log,
StackTraceLogType.None
);
var sampler = CustomSampler.Create( "# スタックトレースなし" );
sampler.Begin();
for ( int i = 0; i < m_count; i++ )
{
Debug.Log( "ピカチュウ" );
}
sampler.End();
}
}
}
}
検証結果
項目 |
GC Alloc |
処理時間 |
スタックトレースあり |
40.1 MB |
1.14 秒 |
スタックトレースなし |
0.7 MB |
0.14 秒 |