Skip to main content
Version: 2022.1

异步更新

异步更新(AsyncUpdate)是一个可以自动根据 CPU 负荷,动态调整更新时机的业务组件。

下面这段代码展示了如何使用异步更新:

private void Start()
{
foreach (var config in configs)
{
AsyncUpdate.RunAsync(() =>
{
var go = Instantiate(template, itemRoot);
go.SetActive(true);
var item = go.GetComponent<MenuItem>();
item.Bind(config);
});
}
}

为什么要使用异步更新?上面的代码中,在没有异步更新的时候,假设 configs 有 1000 个元素,每个元素的实例化需要 1 ms,那么,使用同步的方式这里将造成单帧 1000 ms 的卡顿。而在使用异步更新后,这 1000 个元素的实例化,单帧最大的实例化个数会根据我们设置的单帧最大更新时间片动态计算,可能是 16 个,也可能是 10 个,总体可能需要更长的实例化时间,例如 100 帧,fps 是 33 的时候,只需要 3s 就能完成所有实例化操作。但却有效保障了帧率不会出现过山车式的抖动,从而让程序更流畅的运行。

提示

通过修改单帧最大更新时间片可以调整单帧最大处理异步更新的数量,修改单帧最大更新时间片的方式是修改 Updater 类的 MaxUpdateTimeSlice 属性,默认是 10 ms,可以按需根据实际情况调整。