快速简单的问题,我找不到一个好的解决方案:
什么是一个简单的循环,可以让处理器“咀嚼”至少十秒钟?我已经尝试过这样的事情,但它们眨眼间就完成了:
int max = 300000;
for (int i = 0; i < max; i++)
{
//do some random math here
}
是否有某种计算或其他操作可以在那里占用更多时间并使用一些处理器能力?还是另一种实现方式?
快速简单的问题,我找不到一个好的解决方案:
什么是一个简单的循环,可以让处理器“咀嚼”至少十秒钟?我已经尝试过这样的事情,但它们眨眼间就完成了:
int max = 300000;
for (int i = 0; i < max; i++)
{
//do some random math here
}
是否有某种计算或其他操作可以在那里占用更多时间并使用一些处理器能力?还是另一种实现方式?
如果您想在一段时间内阻塞线程但不用完 CPU 周期,您可以使用Thread.Sleep
.
如果您想在一段时间内浪费 CPU 周期而不做任何有成效的事情,您可以使用Thread.SpinWait
.
根据您的要求:
是否有某种计算或其他操作可以在那里占用更多时间并使用一些处理器能力?
您可以使用 DateTime 和 while 循环:
var start = DateTime.Now();
var end = start.AddSeconds(10);
while (DateTime.Now() != end) {}
你可以一直致力于寻找素数、冒泡排序和类似的事情,你在循环内部有一个循环。您必须有一个大数组才能进行排序,或者选择一个较大的随机数整整 10 秒,但它们将是我想象的最好、最快的赌注。
尝试使用基于时间的物理方程。
例如:一个自由落体的物体在一定的时间内(以秒为单位),直到它到达 X 距离所经过的距离。
private float Gety(float t){float V=t*9.8f; return ((V*V)/19.6f);}
您可以在循环中设置它,当返回等于或大于所选距离时,您的退出点将位于该循环中。
通过增加和减少时间步长,您将执行越来越多的计算,直到达到该距离或更大。
Fe:将初始时间设置为 0.0f,目标距离设置为 500,将时间步长从每次迭代的 0.01f 增加到 0.001f 将相应地执行更多计算,直到达到中断距离。
如果在一个循环内循环并且步长为 0.0000000000001f 你会做得很好。