2016-05-31 69 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

相关问题