有一个空的while循环有什么影响?

Chi*_*ata 3 c# performance loops while-loop

我知道这可能是一个'愚蠢'的问题,但有时,我只想循环直到条件为假但我不喜欢保持循环为空.所以代替:

Visible = true;
while(IsRunning)
{
}
Visible = false;
Run Code Online (Sandbox Code Playgroud)

我通常喜欢:

while(IsRunning)
{
    Visible = true;
}
Visible = false;
Run Code Online (Sandbox Code Playgroud)

但是,我有点担心线路上究竟发生了什么Visible = true;.运行时是否继续执行该语句,即使它是多余的?这样做甚至可取吗?许多"代码增强"插件不喜欢空的while循环,我真的不明白为什么.

所以:

  • 有一个空的while循环有什么问题吗?

  • 如上所示的循环是否有任何性能影响?

谢谢!

Eup*_*ric 6

这称为忙或旋转等待.

主要的问题是,你正在阻塞线程,即运行这个while循环.如果这个线程是GUI线程,那么它将导致冻结和不负责任的GUI.是的,这会导致性能下降,因为编译器和操作系统都无法知道它们是否可以以某种方式优化此循环.

只需尝试像这样制作单循环,看看你的CPU的一个核心是如何以100%运行的.

正确的方法是使用异步编程,在前一个操作完成运行时,通过事件或语言构造(如await)通知代码.

但它通常用于低级系统或语言..NET 4.0引入了SpinWait构造,用作高效的线程sychnronization.

关于你的问题.我相信都不应该使用.它们在调试,性能和代码清晰度方面都存在问题.