我需要在vb.net中引入可变数量的延迟。系统应该明显更慢。
我可以通过无限循环和一些变量创建/赋值来提高程序的CPU使用率,但是如何实际导致滞后?
我知道这是一个奇怪的请求,但我感谢任何帮助,并希望它得到认真对待。这不是恶意使用。
我想要一个“InvokeLag”子程序,它会执行一个动作来减慢计算机的速度,函数调用越快,它就越快。该函数应该尽可能平凡,除了简单的滞后之外,不要修改任何东西或做任何造成损害的事情。
感谢您的帮助!
编辑:最好只用疯狂的数学运算和变量等来实现这种效果。如果可能,没有任何系统。
答案 0 :(得分:1)
如何创建具有最高优先级的新线程?计算Pi将永远不会结束,并且具有高优先级,它应该滞后于您的系统。如果你有几个处理器你可以启动几个线程来计算pi或者有一个单独的程序来计算pi并启动它的几个进程?
Public Class Test
Shared Sub Main()
Dim threadLag As Thread = _
New Thread(AddressOf CalculatePi)
threadLag.Name = "ThreadWait"
threadLag.Priority = ThreadPriority.Highest
threadLag.Start()
End Sub
Private Sub LagRoutine()
While True
Thread.SpinWait(10000)
End While
End Sub
End Class
或
Public Class Test
Shared Sub Main()
For i as Integer = 1 to 10
Dim p As New Process("C:\MyLagProgram.exe")
p.Start()
Next i
End Sub
End Class
<强>更新强>
我认为Eric可能对SpinWait有一个很好的观点,它可能更符合您的需求:
SpinWait方法非常有用 实施锁。中的类 .NET Framework,例如Monitor和 ReaderWriterLock,使用此方法 内部。 SpinWait基本上放了 处理器进入一个非常紧凑的循环, 使用指定的循环计数 迭代参数。持续时间 等待因此取决于 处理器的速度。
将此与Sleep方法进行对比。一个 调用Sleep的线程会产生 其当前处理器的其余部分 时间,即使指定的间隔 是零。指定非零 睡眠间隔删除线程 从线程的考虑 调度程序直到时间间隔 过去。
没有系统IO,它基本上只是一个紧凑的循环,不会放弃它的处理时间。我相信如果你使用我的建议产生几个具有最高优先级的线程,Eric的建议SpinWait你将实现你想要的。这也会减少您需要编写的代码量。
答案 1 :(得分:0)
如何将系统的延迟外包给另一个流程:
System.Diagnostics.Process.Start("Outlook.exe")
但是,严重的是,您的过程和系统需要减慢系统速度。它的计算,还是可以依赖其他进程来生成CPU使用率?这取决于你想要衡量的东西。听起来,将CPU使用率提高到接近100%就是您的目标。
也许打电话给SysInfo或Vista / Win7,调用Windows体验索引。我知道你用“无系统”更新了你的问题,但这有关系吗?
答案 2 :(得分:0)
如果你定义了滞后可能会有所帮助。如果你只是想要加速CPU,那么几个线程和一些循环就可以解决问题(正如你所提到的)。您还可以在System.Threading.Thread类上使用SpinWait()方法。
然而,从你的帖子来看,这听起来似乎是不可接受的......也许这并不足以模拟你的目标?您是否希望硬盘驱动器稍微颠簸?当我想到滞后时,我通常会想到系统在磁盘和内存之间来回切换。如果是这种情况,您可以通过读取和编写任何大型文件(垃圾数据)来自己模拟所有IO。