少年修仙传客户端代码仓库
0312 表格加载优先部分表(如物品表)加载完毕后才可以加载其他表格,避免其他表格使用到物品表导致报错 - 后续优化其他表格的加载时长问题 IL表转化
1个文件已修改
49 ■■■■ 已修改文件
Utility/ConfigInitiator.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/ConfigInitiator.cs
@@ -5,7 +5,7 @@
public class ConfigInitiator
{
    static int minWorkingTask = 1;
    static int minWorkingTask = 3;
    static int maxWorkingTask = 10;
    static List<ConfigInitTask> priorTasks = new List<ConfigInitTask>();
@@ -398,20 +398,23 @@
        }
        var workingTaskLimit = completeCount >= priorTaskCount ? maxWorkingTask : minWorkingTask;
        while (doingTasks.Count < workingTaskLimit && (priorTasks.Count > 0 || normalTasks.Count > 0))
        {
            ConfigInitTask task = null;
            if (priorTasks.Count > 0)
            {
                task = priorTasks[0];
                priorTasks.RemoveAt(0);
            }
            else
            {
                task = normalTasks[0];
                normalTasks.RemoveAt(0);
            }
        while (doingTasks.Count < workingTaskLimit && priorTasks.Count > 0)
        {
            ConfigInitTask task = priorTasks[0];
            priorTasks.RemoveAt(0);
            doingTasks.Add(task);
            task.Start();
        }
        //需要等待优先表完成加载,因为后面的表可能依赖优先表
        if (completeCount < priorTaskCount)
            return;
        while (doingTasks.Count < workingTaskLimit && normalTasks.Count > 0)
        {
            ConfigInitTask task = normalTasks[0];
            normalTasks.RemoveAt(0);
            doingTasks.Add(task);
            task.Start();
        }
@@ -519,6 +522,7 @@
        public string taskName;
        Action task;
        ConfigInitResult result;
        float startTime;
        public ConfigInitTask(string taskName, Action task, ConfigInitResult result)
        {
@@ -530,11 +534,28 @@
        public void Start()
        {
            task();
#if UNITY_EDITOR
            startTime = Time.realtimeSinceStartup;
#endif
        }
        public bool Completed()
        {
#if UNITY_EDITOR
            bool ret = result();
            if (ret)
            {
                float costTime = Time.realtimeSinceStartup - startTime;
                if (costTime > 0.1f)
                {
                    Debug.Log("ConfigInitTask " + taskName + " cost too much time:" + costTime);
                }
            }
            return ret;
#else
            return result();
#endif
        }
    }