性能优化与检测, 防止假死机

This commit is contained in:
2025-12-09 15:12:25 +08:00
parent 5ab19e39f2
commit eebf283e12
6 changed files with 66 additions and 18 deletions

View File

@@ -309,6 +309,11 @@ namespace Demo
#region LoadSubScript
internal static int LoadingTaskCoroutineCount { get; set; } = 0;
internal readonly static LinkedList<IEnumerator> WaitingTaskForLoadingCoroutine = new();
private readonly static WaitForEndOfFrame WaitForEndOfFrameInstance = new();
private const int MaxLoadingCoroutine = 100;
/// <summary>
/// 创建基于子脚本的实例对象
/// </summary>
@@ -345,7 +350,22 @@ namespace Demo
Childs.Add(child);
// Load Child Script
ConventionUtility.StartCoroutine(child.ParseFromScriptFile2Expr(file));
IEnumerator Foo()
{
// 缓存并延迟运行
yield return WaitForEndOfFrameInstance;
yield return child.ParseFromScriptFile2Expr(file);
LoadingTaskCoroutineCount--;
}
child.IsParseScript2Expr = true;
WaitingTaskForLoadingCoroutine.AddLast(Foo());
while (LoadingTaskCoroutineCount < MaxLoadingCoroutine && WaitingTaskForLoadingCoroutine.Count > 0)
{
LoadingTaskCoroutineCount++;
ConventionUtility.StartCoroutine(WaitingTaskForLoadingCoroutine.First.Value);
WaitingTaskForLoadingCoroutine.RemoveFirst();
}
return child;
}
@@ -481,6 +501,12 @@ namespace Demo
while (this.IsParseScript2Expr)
{
yield return null;
while (LoadingTaskCoroutineCount < MaxLoadingCoroutine && WaitingTaskForLoadingCoroutine.Count > 0)
{
LoadingTaskCoroutineCount++;
ConventionUtility.StartCoroutine(WaitingTaskForLoadingCoroutine.First.Value);
WaitingTaskForLoadingCoroutine.RemoveFirst();
}
}
yield return DoSomethingDuringApplyScript();
// 增数