2016-05-31 105 views
4

所以我想在低內存條件下測試我的Windows應用程序,並且我發現最簡單的方法是創建另一個只佔用內存的應用程序(控制檯應用程序)。如何使用內存來測試另一個應用程序?

我創造了這個怪物:

while (true) 
{ 
    try 
    { 
     Marshal.AllocHGlobal(1024); 
    } 
    catch{} 
} 

但只到3.7 GB。然後我打開這個應用程序的另一個實例,它會回落。

如何讓垃圾收集器不收集我的分配?

或者:如何在我的通用Windows應用程序上測試低內存條件?

+0

你是否必須編寫自己的應用程序,那裏有一些免費軟件。例如[TestLimit](https://live.sysinternals.com/WindowsInternals/) - 關於[如何使用]的博客(https://blogs.msdn.microsoft.com/vijaysk/2012/10/26/tools-to-模擬CPU的內存磁盤加載/) – DaveShaw

+2

你檢查了[我如何模擬Windows 7中的低內存條件](http://stackoverflow.com/questions/7827716/how-can-i-simulate- a-low-memory-condition-in-windows-7)或[模擬CPU /內存/磁盤負載的工具](https://blogs.msdn.microsoft.com/vijaysk/2012/10/26/tools-to -simulate-CPU-存儲器磁盤負載/)? – Solarflare

+0

您是否嘗試過從機器中拔出內存DIMM?保持運行操作系統所需的最低限度。 – NotMe

回答

3

您可以嘗試將GCSettings延遲模式更改爲SustainedLowLatency,這將避免垃圾回收,除非系統將耗盡。

GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency; 
1

您可能正在運行到,你看,因爲你正在運行的內存豬作爲一個32位的過程中,這隻能解決內存〜4GB的限制。

嘗試作爲64位進程運行(顯式編譯爲x64)或產生多個副本。

也就是說,有更好的方法來限制被測試進程可用的內存。一個例子在這裏給出:Set Windows process (or user) memory limit

相關問題