ニュース

Top  >   36. メモリ・発熱・クラッシュ  >   Q, GCのスパイクを減らすには?

Q, GCのスパイクを減らすには?

2026/03/20

メインコンテンツへスキップ
< すべてのカテゴリに戻る

A,結論

  • 毎フレームの文字列生成や List の作り直しを減らすと、GC スパイクを抑えやすくなります。
  • まずは Update 内の無駄を疑ってください。

原因 / 背景

  • C# では小さな一時確保が積み重なると、定期的な GC によりフレーム落ちが起きます。
  • VR はカクつきが体感に直結するため、GC 対策の効果が大きいです。

実装 / 手順

  1. Update 内で new を多用していないか確認します。
  2. 文字列連結や一時 List 作成を減らします。
  3. Profiler で GC Alloc を見ながら改善前後を比較します。

StringBuilderを再利用してもToStringや数値の文字列化、Debug.Logで割り当てが生じます。下の例はTMPテキストを値の変更時だけ更新します。GCゼロを保証するものではなく、実際の割り当てはProfilerで測定します。

サンプルコード

using UnityEngine;
using TMPro;

public class ScoreTextUpdater : MonoBehaviour
{
    [SerializeField] private TMP_Text scoreText;
    private int lastScore;
    private bool initialized;

    public void SetScore(int score)
    {
        if (scoreText == null || (initialized && score == lastScore)) return;
        lastScore = score;
        initialized = true;
        scoreText.SetText("Score: {0}", score);
    }
}

※ 実機確認が必要な項目は、Editor だけで判断せず対象デバイスでも必ず動作確認してください。

難易度:Level 3(中級)
対象プラットフォーム:PC,Android,VR,Visual Studio,Unity
関連キーワード:GC,メモリ,最適化

Level 1-2 向けバナーLevel 3-5 向けバナー 1Level 3-5 向けバナー 2