2010-09-02 60 views
2

我需要在vb.net中導致可變數量的滯後。系統應該明顯變慢。在vb.net中導致系統滯後

我可以通過無限循環和一些變量創建/賦值來提高程序的CPU使用率,但是我怎麼會造成滯後?

我明白這是一個奇怪的要求,但我非常感謝任何幫助,並會很感激它被認真對待。這不會被惡意使用。

我想要一個「InvokeLag」子將執行一個動作來減慢計算機速度越快,函數被稱爲它滯後得越快。這個功能應該儘可能的平凡,不要修改任何東西或者做任何事情來造成傷害,而不是簡單的延遲。

感謝您的幫助!

編輯:最好只用瘋狂的數學運算和製作變量等來達到這種效果。如果可能,沒有系統。

回答

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

更新:

我認爲埃裏克可能有大約SpinWait好點,它可能更是什麼您正在查找:

SpinWait方法對於實現鎖定的 非常有用。 .NET Framework中的類(如Monitor和 ReaderWriterLock)在內部使用此方法 。 SpinWait實質上是將 處理器放入一個非常緊密的循環中, 的循環計數由 迭代參數指定。因此等待的時間取決於處理器的速度 。

將此與Sleep方法進行對比。A 即使指定的時間間隔 爲零,調用Sleep的線程也會產生當前處理器 時間片的其餘部分 。爲睡眠指定非零的 時間間隔將使線程 免受線程 調度程序的考慮,直到時間間隔已經過 。

沒有系統IO,它基本上只是一個不放棄其處理時間的緊密循環。我相信,如果您使用我的建議,以Eric的建議SpinWait生成多個優先級最高的線程,您可以實現您正在尋找的內容。這也會減少您需要編寫的代碼量。

+0

這種方法肯定會造成滯後。我做了三個線程,其中兩個是最高的,最後一個是非常規的。 mem的用法正在緩慢上升,有沒有什麼辦法讓三個線程執行無限循環的字符串變量聲明和賦值可能會損害我的電腦? – Cyclone 2010-09-02 20:14:43

+0

@Cyclone:字符串是不可變的,所以它們會慢慢吃掉內存。但是,它不會傷害你的電腦。如果您在32位計算機上超過1.5Gig,您的程序將崩潰。這是非常難以達到的。我正在研究一個大型項目,意外地阻止了我的終結器,我的程序會崩潰,但我非常懷疑你會用字符串崩潰。壓力測試它,看它能在崩潰之前運行多久。 – 2010-09-02 20:57:36

+0

壓力測試現在開始。感謝您的幫助! – Cyclone 2010-09-02 21:15:30

0

如何系統的滯後乾脆外包給另一個進程:

System.Diagnostics.Process.Start("Outlook.exe") 

雖然嚴重,系統是否需要由您的進程&其計算減慢,或者您也可以依靠其他方法來生成CPU用法?這取決於你想要衡量的東西。這聽起來像增加CPU使用率接近100%是你的目標。可能調用SysInfo或Vista/Win7,調用Windows體驗索引。我知道你已經用'沒有系統'來更新你的問題,但這有什麼關係嗎?

+0

Cpu使用率超過100%可能是最好的。這不能使用任何其他進程。 – Cyclone 2010-09-02 19:51:42

0

如果您定義滯後,它可能會有幫助。如果你只是希望飆升CPU,一些線程和一些循環就可以做到這一點(如你所提到的)。你也可以在System.Threading.Thread類中使用SpinWait()方法。

但是,從您的帖子聽起來這是不可接受的...也許這並不足以模擬你要去的東西?您是否希望讓硬盤驅動器稍微有點磕磕碰碰?當我想到滯後時,我通常會想到系統在磁盤和內存之間來回切換。如果是這樣的話,你可以通過讀寫一些大文件(垃圾數據)來模擬所有IO。

+0

好點。滯後的定義尚未被正確定義。 – 2010-09-02 02:46:27

+0

遲到,我的意思是電腦放慢速度,程序沒有響應,也許鼠標是滯後的。 – Cyclone 2010-09-02 19:46:31