[英]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天的時間(請參閱計算多達一萬億美元的估計數),而且您要打印每個數字,這會使情況更加復雜。
您需要做的是允許計算機通過使用協程將這項工作分散到多個幀中。 (您可以改用其他線程來防止鎖定,但是協程是解決此問題的更簡單的Unity方法。)
您的代碼可以如下重寫:
void Start() {
StartCoroutine("CountAndPrint");
}
IEnumerator CountAndPrint() {
for (long m=0; m<122132343243243; m++) {
print(m);
yield return null;
}
}
注:我也切換long
為int
,丹尼爾指出,價值m
,否則將溢出,你應該讓它運行足夠長的時間。
這段代碼的主要區別在於,它基本上允許程序在每次遞增計數之后“暫停”該方法的執行,從而將其余工作保存下來,以備將來使用。 這將允許您在計數器增加的同時繼續與程序進行交互。
希望這可以幫助! 如果您有任何疑問,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.