当我尝试在循环中递增并打印数字时,程序停止响应

时间:2017-07-21 18:44:50

标签: c# unity3d freeze

我在 C#

中有以下代码
void Update () {
    for (int m=0;m<122132343243243;m++)
    {
        print(m);
    }
}

当我尝试运行时,Unity会停止响应。如何让这个功能完成执行?

1 个答案:

答案 0 :(得分:2)

您的代码的主要问题是您要求计算机同时执行大量工作,因此它会停止响应。计算高达122万亿是一项冗长的任务,这本身至少需要20天(参见 Counting up to one trillion 进行估算),而且只是因为你打印的事实而复杂化了每个号码。

您需要做的是允许计算机通过使用coroutines将这项工作分散到多个框架上。 (您可以使用另一个线程来防止锁定,但协同程序是解决此问题的简单Unity方法。)

您的代码可以按如下方式重写:

void Start() {
    StartCoroutine("CountAndPrint");
}

IEnumerator CountAndPrint() {
    for (long m=0; m<122132343243243; m++) {
        print(m);
        yield return null;
    }
}

注意:我还将long切换为int,因为Daniel注意到m的值会溢出,否则会让它运行足够长的时间。

这段代码的主要区别在于它基本上允许程序“暂停”#34;每次计数后执行该方法,保存未来帧的其余工作。这将允许您在计数器增加时继续与程序交互。

希望这有帮助!如果您有任何问题,请告诉我。

相关问题