コガネブログ

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

【Unity】.NET 4.x Equivalent なら Dictionary のキーに列挙型を使用しても GC Alloc は発生しない

概要

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Profiling;

public enum JobType
{
    SOLDIER,
}

public class Example : MonoBehaviour
{
    private void Update()
    {
        var table = new Dictionary<JobType, string>
        {
            { JobType.SOLDIER, "王国兵士" },
        };

        var sampler = CustomSampler.Create( "# Dictionary" );
        sampler.Begin();
        var resultA = table[ JobType.SOLDIER ];
        sampler.End();
    }
}

上記のようなコードを .NET 3.5 Equivalent で実行すると

f:id:baba_s:20190906130649p:plain

GC Alloc が発生しますが

f:id:baba_s:20190906130707p:plain

.NET 4.x Equivalent なら GC Alloc は発生しません