コガネブログ

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

【Unity】Dictionary のキーに列挙型を使用すると Android の IL2CPP ビルドの時間・APK ファイルのサイズがどのくらい増えるか検証してみた

はじめに

Dictionary のキーに int を使用した場合と列挙型を使用した場合で
Android の IL2CPP ビルドの時間がどのくらい増えるか、
生成される APK ファイルのサイズがどのくらい増えるかを検証してみました

検証環境

  • Windows 10(SSD)
  • Unity 2018.2.14f1

検証方法

public enum Example0 { VALUE_1, VALUE_2, VALUE_3,  VALUE_4, VALUE_5 }
public enum Example1 { VALUE_1, VALUE_2, VALUE_3,  VALUE_4, VALUE_5 }
...
public enum Example99 { VALUE_1, VALUE_2, VALUE_3,  VALUE_4, VALUE_5 }

上記のように列挙型が複数定義されている状態で

public class Hoge
{
    Dictionary<Example0, string> d0 = new Dictionary<Example0, string>();
    Dictionary<Example1, string> d1 = new Dictionary<Example1, string>();
    ...
    Dictionary<Example99, string> d99 = new Dictionary<Example99, string>();
}

キーに列挙型を使用した Dictionary を複数定義した場合と

public class Hoge
{
    Dictionary<int, string> d0 = new Dictionary<int, string>();
    Dictionary<int, string> d1 = new Dictionary<int, string>();
    ...
    Dictionary<int, string> d99 = new Dictionary<int, string>();
}

キーに int を使用した Dictionary を複数定義した場合で
それぞれ Android の IL2CPP ビルドを行い、
ビルドにかかった時間と、生成された APK ファイルのサイズを確認してみました

検証結果

ビルド時間

種類 初回 2回目 3回目
キーが int の Dictionary 50 個定義 78 秒 75 秒 75 秒
キーが int の Dictionary 100 個定義 88 秒 76 秒 76 秒
キーが int の Dictionary 200 個定義 89 秒 76 秒 76 秒
キーが列挙型の Dictionary 50 個 122 秒 89 秒 88 秒
キーが列挙型の Dictionary 100 個 155 秒 103 秒 103 秒
キーが列挙型の Dictionary 200 個 227秒 133 秒 132 秒
  • 初回は Dictionary を定義した直後にビルドした結果
  • 2回目以降はスクリプトに変更をかけずにビルドした結果
  • int を使用した場合は Dictionary の数が増えてもビルド時間はほとんど変わらず
  • 列挙型を使用した場合は Dictionary の数が増えるほどビルド時間も増えた
  • 列挙型を使用した場合は特に初回のビルドに時間がかかった

APK ファイルサイズ

種類 サイズ
キーが int の Dictionary 50 個 12.4 MB
キーが int の Dictionary 100 個 12.4 MB
キーが int の Dictionary 200 個 12.5 MB
キーが列挙型の Dictionary 50 個 13.4 MB
キーが列挙型の Dictionary 100 個 14.4 MB
キーが列挙型の Dictionary 200 個 16.4 MB
  • int を使用した場合は Dictionary の数が増えてもサイズはほとんど変わらず
  • 列挙型を使用した場合は Dictionary の数が増えるほどサイズも増えた

補足

  • 今回は Unity プロジェクトを SSD に保存した状態かつ、
    ビルドの保存先も SSD に指定した状態で検証を行った
    • HDD だとさらにビルド時間は増えそう
  • 検証に使用したスクリプトは Gist で公開しています
    https://gist.github.com/baba-s/63e6b3d8aa350edcdd8108cd50fc3d92