gpt4 book ai didi

c# - Unity table 游AI导致内存泄露

转载 作者:太空狗 更新时间:2023-10-29 22:35:54 25 4
gpt4 key购买 nike

我正在创建一个类似于井字游戏的棋盘游戏,并且我已经创建了一个 AI 来玩该游戏。 AI 非常占用 CPU,所以我决定将它放在它自己的线程上。我正在使用此插件进行多线程处理:https://www.assetstore.unity3d.com/en/#!/content/15717 .

我有这个 IEnumerator:

static IEnumerator executeAITurn(Turn turn) {
Vector2[] move = mctsManager.mcts(new State(sections, null, turn), AIIterations)[0, 0].metaData.lastMove;

yield return Ninja.JumpToUnity;

input(move, true);

yield return Ninja.JumpBack;

Debug.Log("DONE!");
}

我用

运行它
gameManager.StartCoroutineAsync(executeAITurn((AITurn == Turn.X) ? Turn.O : Turn.X));

通常,当我运行 executeAITurn 时,它可以正常工作,没有问题,但出于某种原因,有时当我运行它时,它会按照预期的方式运行,但在任务管理器中,我的内存开始增加大约 30 MB/秒。内存一直增加到 1000 MB,游戏变得非常慢。当我关闭播放模式时,内存有时会继续增加或停在原处。我必须通过任务管理器结束 Unity 以释放内存。

我尝试过的一件事是用常规 for 循环替换 foreach 循环,这似乎有所帮助。内存增加的速度下降了很多(最初它会以大约 100 mb/秒的速度增加)。

如有任何帮助,我们将不胜感激。

下面是executeAITurn中涉及的部分代码:

mctsManager 类:https://pastebin.com/yzeHrY2p

输入函数:https://pastebin.com/8f2hzZws

最佳答案

这听起来更像是垃圾收集问题。我查看了您的 MCTS 代码并注意到以下内容。

    // Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

这在您的第一个代码 C# 输入函数中缺失。基本上,这是调用更新功能。您可能会注意到,它表示更新函数每帧调用一次。引用这个https://unity3d.com/learn/tutorials/topics/performance-optimization/optimizing-garbage-collection-unity-games

我会推荐缓存。

希望对您有所帮助。

关于c# - Unity table 游AI导致内存泄露,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45896990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com