コガネブログ

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

【Unity】System.Enum で引数を受け取ると GC Alloc が発生するが Generic 制約 で Enum を指定すると発生しない

概要

using System;
using UnityEngine;

public class Example : MonoBehaviour
{
    private enum Type
    {
        GRASS,
        FIRE,
        WATER,
    }

    private void Update()
    {
        Hoge1( Type.FIRE );
    }

    private void Hoge1( Enum value )
    {
    }
}

System.Enum で引数を受け取ると

f:id:baba_s:20191224111609p:plain

GC Alloc が発生するが

using System;
using UnityEngine;

public class Example : MonoBehaviour
{
    private enum Type
    {
        GRASS,
        FIRE,
        WATER,
    }

    private void Update()
    {
        Hoge2( Type.FIRE );
    }

    private void Hoge2<T>( T value ) where T : Enum
    {
    }
}

Generic 制約 で Enum を指定すると

f:id:baba_s:20191224111649p:plain

GC Alloc は発生しない

参考サイト様

https://www.slideshare.net/xin9le/dotnetperformancetips-170268354