コガネブログ

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

【Unity】クラスと構造体それぞれのインスタンスを生成した時の GC Alloc の違い

概要

using UnityEngine;
using UnityEngine.Profiling;

public class Example : MonoBehaviour
{
    public class Hoge { }

    public struct Fuga { }

    private void Start()
    {
        var count = 1000000;

        var samplerA = CustomSampler.Create( "AAAAAAAAAAAAAAAAAAAA" );
        samplerA.Begin();
        for ( int i = 0; i < count; i++ )
        {
            new Hoge();
        }
        samplerA.End();

        var samplerB = CustomSampler.Create( "BBBBBBBBBBBBBBBBBBBB" );
        samplerB.Begin();
        for ( int i = 0; i < count; i++ )
        {
            new Fuga();
        }
        samplerB.End();
    }
}

変数やプロパティ、関数を何も持たない Hoge クラスと Fuga 構造体のインスタンスを
それぞれ 1,000,000 個作ると

f:id:baba_s:20190401101012p:plain

GC Alloc はこのような感じになる(構造体の場合は GC Alloc が発生しない)