gpt4 book ai didi

C#如何循环最大次数

转载 作者:行者123 更新时间:2023-11-30 14:53:12 25 4
gpt4 key购买 nike

当遍历一个非常长的数组,或者对每个索引进行复杂的计算时,有没有一种方法可以在遍历数组达到最长时间后产生 yield 。最大时间量是每帧的最大时间。

例如:

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

所以基本上,我想要实现的是 cpu 的高百分比使用率,但是,我不希望它超过 100%,用户会体验到滞后

编辑:对不起,有点困惑。一个更明显的例子可能是在诸如 blender 之类的程序中进行 3d 渲染。当用户点击渲染时,它会计算每个像素以确定它需要的颜色。当查看 cpu 使用率时,它接近 100%。但是,它在计算像素时不会卡住,同时会尽可能计算最大数量

最佳答案

如果您在多个 CPU 上运行您的代码(如 multithreading 标记所暗示的那样),那么(在通常情况下)应该没有必要为了您的用户界面而停止执行循环保持响应。在一个或多个后台线程上执行计算,并让这些后台线程根据需要更新 UI 线程。

is there a way to yield after iterating through the array for the maximum amount of time

如果 yield 你的意思是停止(并从下一帧开始重新开始),那么确定。你可以传递 CancellationToken到您的线程,并让它定期检查取消请求。您可以在每帧开始时使用计时器来触发该请求,或者更可能的是,使用已经进行帧结束处理的现有机制来触发线程停止工作。

如果 yield 你的意思是在我所在的地方停止并在下一帧开始时在那个地方继续,我会问为什么要停止,因为你有多个 CPU。如果您必须停止,您可以像以前一样使用 CancellationToken,但只需跟踪您在循环中的位置,从那里而不是从头开始继续。

So basically, what I want to achieve is high percent usage for the cpu, however, I do not want it to go beyond 100%, which the user will experience lag

根据定义,您永远不会超过 100% 的 CPU 使用率。为避免 CPU 使用率高时出现滞后感,请使用 thread priorities确保前台线程的优先级高于后台线程。

关于C#如何循环最大次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30022327/

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