Unity Advent Calendar 2015の16日目の記事になります。
※遅くなりましてすいません。。。
========
Unity5.3からAssetBundleの新しい圧縮形式(LZ4)が出た!ということで、
「どんだけパフォーマンスが違うのだろう?」っと思い「よっしゃ!計測したろ!」っ思いったったが、
変なところで色々難航してしまい、なんとも言えないデータになってしまいました。。。
しかし、それなりの指標になるのでは・・・・?っとポジティブに捉え公開させていただきます!
「ほーん (○´_U`○)」な感じで見ていただけると幸いです。
※5.3.1f1エディタ上での計測になります。
使用想定
パフォーマンスを測定するにあたり、使用時を想定して計測しようかと考えまして、
おそらくよくある流れの、
「アセットバンドルをネット上からDLしてきて、それをローカルストレージに書き込む。使用時はローカルストレージから読み込む」
こちらの想定でいきたいと思います。
アセットバンドルの対象
アセットバンドルの対象ファイルは以下のようにしました
- 256*256のPNG画像200個
- 圧縮設定は16bit
- エディタの表記では1つ170.7KB
アセットバンドル種類
計測したアセットバンドルの種類は、Unity4の事も考慮して以下の6つにしました
- LZMA圧縮形式で、200個の画像を1つのアセットバンドルに
- LZMA圧縮形式で、200個の画像を1つ1つアセットバンドル化(計200個)しそれをZIP化し1つのZIPファイルに
- LZ4圧縮形式で、200個の画像を1つのアセットバンドルに
- LZ4圧縮形式で、200個の画像を1つ1つアセットバンドル化(計200個)しそれをZIP化し1つのZIPファイルに
- 無圧縮で、200個の画像を1つのアセットバンドルに
- 無圧縮で、200個の画像を1つ1つアセットバンドル化(計200個)しそれをZIP化し1つのZIPファイルに
※ZIPライブラリはDotNetZipを使用しました。
ダウンロード計測
まずはダウンロード周りからのパフォーマンス。
アセットバンドル(ZIP)ファイル容量
容量 | |
---|---|
LZMA | 948KB |
LZMA(ZIP) | 1.43MB |
LZMA(ZIP解凍後の合計) | 1.67MB |
LZ4 | 1.74MB |
LZ4(ZIP) | 1.67MB |
LZ4(ZIP解凍後の合計) | 2.46MB |
無圧縮 | 33.4MB |
無圧縮(ZIP) | 1.79MB |
無圧縮(ZIP解凍後の合計) | 34.3MB |
やはりLZ4はLZMAよりサイズがでかくなってますね。
無圧縮ZIPが意外と小さいのも驚き。
ダウンロード使用メモリ
ダウンロード時に使用したであろうメモリ使用量
ダウンロード方法は以下の3つで計測
- WWW
- WWW.LoadFromCacheOrDownload
- UnityWebRequest
WWW | WWW.LoadFromCacheOrDownload | UnityWebRequest | |
---|---|---|---|
LZMA | 3.5MB | 0.5MB | 2.3MB |
LZMA(ZIP) | 0.5MB | 0.5MB | 1.5MB |
LZ4 | 2.1MB | 0.5MB | 1.4MB |
LZ4(ZIP) | 0.8MB | 0.6MB | 2MB |
無圧縮 | 35.4MB | 0.5MB | 33MB |
無圧縮(ZIP) | 0.6MB | 0.4MB | 1.5MB |
当然ですが、ファイル容量ぐらいメモリを使用してました。
LoadFromCacheOrDownloadの結果は多分おかしい。
ローカルストレージへの書き込み時間
お次はダウンロードしたデータ(アセットバンドル)のストレージへの書き込み時間
ZIPは解凍+書き込み時間を計測
書き込み時間 | |
---|---|
LZMA | 4ms |
LZMA(ZIP) | 1464ms |
LZ4 | 5ms |
LZ4(ZIP) | 1286ms |
無圧縮 | 125ms |
無圧縮(ZIP) | 2187ms |
エディタだから早すぎた・・・・
とは言えZIP解凍にここまでかかることに改めて驚き
ローカルストレージからの読み込み計測
次に保存したアセットバンドルをローカルストレージから読み込んで、1つの画像をImageに反映させるまでの時間とメモリを計測
読み込み時間
ダウンロード方法は以下の5つで計測
- WWW
- WWW.LoadFromCacheOrDownload
- UnityWebRequest
- AssetBundle.LoadFromFileAsync
- AssetBundle.LoadFromMemoryAsync
WWW | LoadFromCacheOrDownload | UnityWebRequest | LoadFromFileAsync | LoadFromMemoryAsync | |
---|---|---|---|---|---|
LZMA | 208ms | 24ms | 208ms | 211ms | 224ms |
LZ4 | 27ms | 24ms | 27ms | 23ms | 26ms |
無圧縮 | 58ms | 24ms | 62ms | 23ms | 83ms |
PNG画像直読み | 10ms | – | – | – | – |
LZ4きてますね!ここまで早いとは思わなかった。
LoadFromCacheOrDownloadの結果は多分おかしい。
読み込み時の使用メモリ
WWW | LoadFromCacheOrDownload | UnityWebRequest | LoadFromFileAsync | LoadFromMemoryAsync | |
---|---|---|---|---|---|
LZMA | 4.1MB | 1.2MB | 4.0MB | 4.1MB | 5.0MB |
LZ4 | 3.1MB | 1.2MB | 3.0MB | 1.2MB | 3MB |
無圧縮 | 35MB | 1.2MB | 35MB | 0.4MB | 35MB |
PNG画像直読み | 0.5MB | – | – | – | – |
LZ4またまたきてますね!
あとLoadFromFileAsyncも優秀!
LoadFromCacheOrDownloadの結果は多分おかしい。
総評
データの信ぴょう性はいまいちながら、LZ4スゴイ
LZMAよりは確かに容量が大きいがUnity4時代によく利用されていたであろう無圧縮ZIPとほぼ同じなので問題ない気配
そして新たに圧縮したAssetBundle読み込みに対応したLoadFromFileAsyncスゴイ
========
Unity Advent Calendar 2015の16日目の記事としてかかせていただきました。
16日から1週間遅れとなってしまい本当に申し訳ないです。
ほんの少しでも参考になりましたら幸いです。
コメント