在vb.net中引发系统滞后

时间:2010-09-02 02:14:54

标签: vb.net

我需要在vb.net中引入可变数量的延迟。系统应该明显更慢。

我可以通过无限循环和一些变量创建/赋值来提高程序的CPU使用率,但是如何实际导致滞后?

我知道这是一个奇怪的请求,但我感谢任何帮助,并希望它得到认真对待。这不是恶意使用。

我想要一个“InvokeLag”子程序,它会执行一个动作来减慢计算机的速度,函数调用越快,它就越快。该函数应该尽可能平凡,除了简单的滞后之外,不要修改任何东西或做任何造成损害的事情。

感谢您的帮助!

编辑:最好只用疯狂的数学运算和变量等来实现这种效果。如果可能,没有任何系统。

3 个答案:

答案 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

CalculatePi

MSDN

<强>更新

我认为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。