NoaGCCollectCallbacks
NOA Debuggerが実行するガベージコレクションに関連するイベントを設定します。
NoaGCCollectCallbacksを継承したクラスをNoaProfilerに引き渡すことで、ガベージコレクションに関連するイベントをカスタマイズできます。
オーバーライド可能な要素
Methods
| メソッド名 | 説明 |
|---|---|
| OnBeforeGCCollect() | ガベージコレクション処理の前に実行するメソッドです。 |
| OnAfterGCCollect() | ガベージコレクション処理の後に実行するメソッドです。 NOA Debuggerのガベージコレクション処理を実行しなかった場合でもこのメソッドは実行します。 |
Properties
| プロパティ名 | 説明 |
|---|---|
| IsAllowBaseGCCollect | NOA Debuggerのガベージコレクション処理を実行するかを判断します。 デフォルトはtrueで、falseに変更した場合はガベージコレクション処理を実行しません。 |
関連する型
INoaGCCollectCallbacks
NoaGCCollectCallbacksのオーバーライド可能なメソッドとプロパティは、このインターフェースで定義しています。
カスタムクラスで複数のコールバックの定義を集約したい場合や、既存のカスタムクラスを継承しつつコールバック機能を追加したい場合は、NoaGCCollectCallbacksクラスの代わりにこのインターフェースを利用することで実現できます。
サンプルコード
#if NOA_DEBUGGER
using NoaDebugger;
using System;
using UnityEngine;
// NOA Debuggerのガベージコレクション処理前後にイベントを実行する場合の例
public class ExampleGCCollector : NoaGCCollectCallbacks
{
// ガベージコレクション実行前後のメモリ使用量をログ出力する例
public override void OnBeforeGCCollect()
{
Debug.Log($"Memory before GC: {GC.GetTotalMemory(false)} bytes");
}
public override void OnAfterGCCollect()
{
Debug.Log($"Memory after GC: {GC.GetTotalMemory(false)} bytes");
}
}
// 独自のフラグでNOA Debuggerのガベージコレクション処理の実行有無を制御する場合の例
public class ExampleOriginalGCCollector : NoaGCCollectCallbacks
{
bool isAllowBaseGCCollect = true;
public override bool IsAllowBaseGCCollect => isAllowBaseGCCollect;
// ガベージコレクションの実行に一定の間隔を設ける例
float lastGCCollectTime = 0.0f;
const float gcCollectInterval = 5.0f;
public override void OnBeforeGCCollect()
{
float currentTime = Time.realtimeSinceStartup;
if (currentTime - lastGCCollectTime < gcCollectInterval)
{
isAllowBaseGCCollect = false;
}
else
{
isAllowBaseGCCollect = true;
lastGCCollectTime = currentTime;
}
}
}
#endif
