C# 所有系统的循环速度是否相同?

C# 所有系统的循环速度是否相同?,c#,.net,windows,loops,mono,C#,.net,Windows,Loops,Mono,所有系统的C#循环速度是否相同。如果不是,我如何控制循环速度以使体验在所有平台上保持一致?否,并非所有系统中的循环都是相同的。这个问题有太多的因素,如果没有代码,就无法很好地回答 这是一个简单的循环: int j; for(int i = 0; i < 100; i++) { j = j + i; } intj; 对于(int i=0;i

所有系统的C#循环速度是否相同。如果不是,我如何控制循环速度以使体验在所有平台上保持一致?

否,并非所有系统中的循环都是相同的。这个问题有太多的因素,如果没有代码,就无法很好地回答

这是一个简单的循环:

int j;
for(int i = 0; i < 100; i++) {
  j = j + i;
}
intj;
对于(int i=0;i<100;i++){
j=j+i;
}
这个循环太简单了,它只是一对加载、添加、存储操作,带有一个跳转和一个比较。这只需要几次微操作,而且速度非常快。然而,这些微操作的速度将取决于处理器。如果处理器可以在十亿分之一秒(大约1千兆赫兹)内完成一个微操作,那么循环将需要大约6*100微操作(这都是粗略的估计,涉及的因素太多了,我只想进行近似计算)或6*100十亿分之一秒,或略小于百万分之一秒。对于整个循环。对于大多数操作系统功能,您几乎无法衡量这一点

我想演示一下循环的速度。我在上面提到了每秒10亿微操作的处理器。现在考虑一个处理器,每秒可以做40亿次微操作。该处理器的速度大约是第一个处理器的四倍。我们没有改变密码

这能回答问题吗


对于那些想提到编译器可能会循环展开此项的人,为了学习,请忽略此项。

您永远不能依赖循环的速度。尽管所有现有的编译器都努力使循环尽可能高效,因此它们可能会产生非常相似的结果(如果有足够的开发时间),但影响这一点的不仅仅是编译器


即使撇开其他一切不谈,不同的机器也有不同的性能。没有两台机器能产生完全相同的环路速度。事实上,即使在同一台机器上启动两次程序,性能也会略有不同。这取决于其他程序正在运行,CPU今天的感觉如何,以及月亮是否在发光。

您可以设置循环所需的最短时间,如下所示:

for(int i= 0; i < 10; i++)
{
   System.Threading.Thread.Sleep(100);
   ... rest of your code...
}
for(int i=0;i<10;i++)
{
系统线程线程睡眠(100);
…剩下的代码。。。
}
休眠调用至少需要100毫秒(您无法说出最大值),因此循环至少需要1秒来运行10次迭代


请记住,在用户界面线程上休眠是与Windows编程的正常方式相反的,但这可能对您的快速破解非常有用。

控制这种情况的一种方法是使用秒表来控制何时执行逻辑。请参见以下示例代码:

int noofrunspersecond = 30;
long ticks1 = 0;
long ticks2 = 0;
double interval = (double)Stopwatch.Frequency / noofrunspersecond;
while (true) {
  ticks2 = Stopwatch.GetTimestamp();
  if (ticks2 >= ticks1 + interval) {
    ticks1 = Stopwatch.GetTimestamp();
    //perform your logic here
  }
  Thread.Sleep(1);
}
这将确保在系统能够保持的情况下,以给定的间隔执行逻辑,因此如果尝试每秒执行100次,根据执行的逻辑,系统可能无法每秒执行100次该逻辑。在其他情况下,这应该可以正常工作


这种逻辑有助于获得平滑的动画,例如在不同的系统上不会加速或减速。

您可以使用各种方法减慢循环,但这仅在某些情况下可行。关于你的情况的更多细节将有助于我们提供答案。作为记录,这个问题与他的业务要求无关。他需要为添加的USB设备进行轮询。呵呵,不要轮询。还没有人告诉他WM_DEVICECHANGE?你启发了我:@shogun:哈哈。只要你不等待心理学专家询问CPU的精神病,你是否愿意详细说明,因为你显然知道得更好?