unity3d 加載卡頓,File.Exists 罪魁禍首之天坑

File.Exists 是用來判定文件是否存在,然後進行加載的常用邏輯,但也是造成加載卡頓的 罪魁禍首,
這裏測試,在華爲v10 ,1加手機,會特別明顯, 我用moto手機測試感覺沒什麼問題,也許跟手機裝的app數量也有關係,總之對於這方法儘量避免使用,
下面說明一下這個方法的測試情況:

測試機器:華爲v10
目錄下文件數量:13749
判定不存在的文件:消耗30ms-45ms不等
判定存在的文件:消耗0.2ms~0.5ms不等
結果:大概快了100倍。
如果加載文件多,這些耗時加起來就一個大問題了

嘗試測試unity引擎問題
測試機器:華爲v10
目錄下文件數量:14612
1、unity4 mono,File.Exists會消耗31~71ms
2、unity2017 mono, File.Exists會消耗30~50ms
3、unity2017 il2cpp, File.Exists會消耗30-45ms
4、unity2017 il2cpp 用FileInfo獲取Exists屬性 70~100ms
5、unity2017 il2cpp 用File.Open讀取不存在的文件,40~90ms
6、android app,native C直接調用stat和lstat系統api,其中stat:1540ms,lstat:1540ms,合計30~80ms
7、android app,native C用fopen代替stat和lstat,判斷打開成功與否,20~45ms,
結果:可以斷定與unity4,unity2017,mono,il2cpp,都無關,

可知File.Exists在手機上存在很大的問題, 所以我們的次級解決方案是每做一次File.Exist的就進行標記緩存,避免多次加載同一個文件的時候造成多次傷害,最好的方案就是確保加載的文件都的一一存在的!!!!!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章