Open absences opened 2 weeks ago
我的做法是分段加载
const int perNum = 50; //同时下载的个数
public async UniTask<RawFileHandle[]> LoadRawFileByTags(string[] tags)
{
var infos = package.GetAssetInfos(tags);
RawFileHandle[] handles = new RawFileHandle[infos.Length];
int finish = 0;
for (int i = 0; i < infos.Length; i++)
{
var handle = package.LoadRawFileAsync(infos[i]);
handles[i] = handle;
handle.Completed += (_) => finish++;
if ((i + 1) % perNum == 0)
{
await UniTask.WaitUntil(() => finish == perNum);
finish = 0;
}
}
await UniTask.WaitUntil(() => finish == infos.Length % perNum);
return handles;
}
目前是有200多个,几kb的原生资源。 在webgl上,加载时从远端下载操作,
几百个BundledRawFileProvider等待RawFile下载校验完成, 在FileDownloader 中,走到了VerifyTempFile这一步,校验操作VerifyTempFileOperation加入异步执行列表_operations中, 由于前面的BundledRawFileProvider大量操作占用时间长,导致IsBusy为true,打断了异步执行, VerifyTempFileOperation将永不可能执行, BundledRawFileProvider一直在等待bundle done,从而卡死。
也就是说在一些性能较差的情况下,异步系统将无法正常执行 异步操作时间切片也不可能每次都能完美契合实际设备性能