2012-02-21 110 views
2

我想編寫一個應用程序,該應用程序在服務器上消耗大量內存,以便能夠顯示與服務器上的內存壓力相關的問題。我非常瞭解C#,但我很好奇什麼導致應用程序以可控方式消耗過量內存的最有效方法。例如,我希望能夠傳遞一個消耗x MB內存的參數,並使其消耗到接近該值的某個位置。任何想法,我可能會這樣做,將不勝感激。創建內存消耗應用程序

+0

實際上,性能在不同的內存使用情況下可能會有不同的表現。分配一個大塊可能與分配很多小塊有不同的影響。如果你想要一個好的測試,你應該測試兩者。當通過C#中的GC分配內存時,您無法真正控制正在使用的底層內存。直接分配(稱爲Marshall.Alloc ...)將是一種方法。 – Polity 2012-02-21 02:27:13

+0

您始終可以實施光線跟蹤算法並加載大量的幾何圖形。這將消耗快速和殘酷的內存。 – user18490 2015-04-08 19:17:35

回答

3

那不是最簡單的方法是隻創建您感興趣的大小的字節數組。要得到你可能需要使用這種技術使用一個以上的陣列非常大的分配。

此外,如果你是如此inclinded你可以的P/Invoke到VirtualAlloc

如果你只需要一個應用程序,你也可以使用Testlimit Sysinternals公司。該實用程序在Mark Russinovich的真棒Pushing the Limits of Windows系列中使用。

+0

這是我的第一個想法,但我第二次猜測它是否真的很容易? – 2012-02-21 04:31:20

+0

是的,你應該能夠在分配之後使用'GC.GetTotalMemory'來查看差異 – 2012-02-21 04:34:39

+0

對於我可以分配的內容而言,如果沒有得到一個'System.OutOfMemoryException',就會有這個限制。試圖跳過1GB總是會導致異常。我可以啓動應用程序的多個副本來獲得我想要的效果,但是如果爲了獲得大小爲4-8GB的大內存分配,這將是最好的選擇。 – 2012-02-21 05:12:24

2

根據什麼「內存壓力」你正在尋找:

  • BOOT.INI burnmemory設置選項 - http://support.microsoft.com/kb/833721要真正限制可用的內存量。
  • 創建一個程序,只是分配大量的內存,並積極接觸它。通過這種方式,您可以看到其他程序如何對內存分配/使用中的緩慢進行反應。
  • 在您有興趣在地址空間(主要是32位)上創建壓力的過程中分配內存。
2

一個這樣做可以創建一個字節數組的方式。將輸入值從MB轉換爲字節,然後分配數組。如果你想直接嘗試堆棧分配,你可以使用stackalloc