shu*_*o23 3 c# optimization multithreading
当经历一个非常长的数组,或者每个索引都有一个复杂的计算时,有一种方法可以在迭代数组后产生最长的时间.最长时间是每帧的最大时间.
例如:
for(int i = 0; i < 100000; i++){
do something complicated;
if(maximum amount of time /*right before the user feels lag*/)
yield; (come back and resume i where it last yielded)
}
}
//order does not matter
Run Code Online (Sandbox Code Playgroud)
所以基本上,我想要实现的是cpu的高百分比使用率,但是,我不希望它超过100%,用户将遇到滞后
编辑:抱歉有点混乱.一个更清晰的例子可能是在诸如blender之类的程序中进行3d渲染.当用户点击渲染时,它会计算每个像素以确定它需要的颜色.当人们查看cpu使用情况时,它接近100%.但是,它在计算像素时不会冻结,同时会尽可能计算最大量
如果您在多个CPU上运行代码(如multithreading标记所暗示的那样),则应该(在通常情况下)不需要停止执行循环以使您的用户界面保持响应.在一个或多个后台线程上执行计算,并让这些后台线程根据需要更新UI线程.
有没有办法在迭代数组最长时间后产生
如果按收益率表示只是停止(并从下一帧开始重启),那么肯定.您可以将CancellationToken传递给您的线程,并让它定期检查取消请求.您可以在每个帧的开头使用计时器来触发该请求,或者更可能的是,使用已经执行帧结束处理的现有机制来触发线程停止工作.
如果你的收益意味着停在我所在的地方,并在下一帧开始时在那个地方继续,我会问为什么停止,因为你有多个CPU.如果你必须停止,你可以像以前一样使用CancellationToken,但只是跟踪你在循环中的位置,从那里而不是在开始时重新开始.
所以基本上,我想要实现的是cpu的高百分比使用率,但是,我不希望它超过100%,用户将遇到滞后
根据定义,您永远不能超过100%的CPU使用率.为避免CPU利用率较高时出现滞后感,请使用线程优先级来确保前台线程的优先级高于后台线程.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |