はじめに
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