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的就进行标记缓存,避免多次加载同一个文件的时候造成多次伤害,最好的方案就是确保加载的文件都的一一存在的!!!!!!!!