当我尝试循环递增和打印数字时程序停止响应
Program stops responding when I try to increment and print a number in a loop
我在 C# 中有以下代码:
void Update () {
for (int m=0;m<122132343243243;m++)
{
print(m);
}
}
当我尝试 运行 时,此 Unity 停止响应。我怎样才能让这个函数完成执行?
您的代码的主要问题是您要求计算机同时完成大量工作,因此它停止响应。数到 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;
}
}
注意:我还为 int
切换了 long
,正如 Daniel 指出的那样 m
的值将溢出,否则你应该让它 [=33] =]足够长的时间。
此代码的主要区别在于它基本上允许程序在每次计数后 "pause" 执行该方法,从而为以后的帧节省其余的工作。这将允许您在计数器增加时继续与程序交互。
希望对您有所帮助!如果您有任何问题,请告诉我。
我在 C# 中有以下代码:
void Update () {
for (int m=0;m<122132343243243;m++)
{
print(m);
}
}
当我尝试 运行 时,此 Unity 停止响应。我怎样才能让这个函数完成执行?
您的代码的主要问题是您要求计算机同时完成大量工作,因此它停止响应。数到 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;
}
}
注意:我还为 int
切换了 long
,正如 Daniel 指出的那样 m
的值将溢出,否则你应该让它 [=33] =]足够长的时间。
此代码的主要区别在于它基本上允许程序在每次计数后 "pause" 执行该方法,从而为以后的帧节省其余的工作。这将允许您在计数器增加时继续与程序交互。
希望对您有所帮助!如果您有任何问题,请告诉我。