对于所有系统,循环是否以相同的速度发生?

vis*_*hnu 3 .net c# windows mono loops

对于所有系统,C#中的循环是否以相同的速度发生.如果没有,我如何控制循环速度以使所有平台上的体验保持一致?

Wil*_*ean 9

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

for(int i= 0; i < 10; i++)
{
   System.Threading.Thread.Sleep(100);
   ... rest of your code...
}
Run Code Online (Sandbox Code Playgroud)

睡眠调用至少需要100ms(你不能说最大值是多少),因此你的循环至少需要1秒才能运行10次迭代.

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


Kon*_*lph 7

你永远不能依赖循环的速度.虽然所有现有的编译器都努力使循环尽可能高效,因此它们可能产生非常相似的结果(给定足够的开发时间),编译器并不是影响它的唯一思考.

即使把所有其他东西放在一边,不同的机器也有不同的性能 没有两台机器可以为循环产生完全相同的速度.实际上,即使在同一台机器上启动程序两次,也会产生略微不同的性能.这取决于其他程序正在运行,CPU今天的感觉以及月亮是否闪亮.


jco*_*and 6

不,所有系统中的循环都不会相同.这个问题有很多因素,没有代码就无法回答.

这是一个简单的循环:

int j;
for(int i = 0; i < 100; i++) {
  j = j + i;
}
Run Code Online (Sandbox Code Playgroud)

这个循环太简单了,它只是一对加载,添加,存储操作,跳转和比较.这将只有几个microops,并且会非常快.但是,那些微控制器的速度将取决于处理器.如果处理器可以在10亿分之一秒(大约1千兆赫兹)内完成一个微操作,那么环路将需要大约6*100微安(这是所有粗略估计,涉及的因素很多,我只是为了近似)或6*100十亿分之一秒,或略低于百万分之一秒.对于整个循环.大多数操作系统功能都无法衡量这一点.

我想证明循环的速度.我在上面引用了每秒10亿微秒的处理器.现在考虑一个每秒可以达到40亿微秒的处理器.该处理器比第一个处理器快四倍(大致).我们没有改变代码.

这回答了这个问题吗?

对于那些想要提及编译器可能循环展开它的人,请忽略它以便学习.