我怎么能记住内存来测试另一个应用程序?

时间:2016-05-31 20:41:01

标签: c# windows memory win-universal-app allocation

所以我想在低内存条件下测试我的Windows应用程序,我发现最简单的方法是创建另一个只占用内存的应用程序(控制台应用程序)。

我创造了这个怪物:

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

但它只有3.7 GB。然后我打开这个应用程序的另一个实例,然后它又回来了。

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

或者:我如何在通用Windows应用程序上测试低内存条件?

2 个答案:

答案 0 :(得分:3)

您可以尝试将GCSettings延迟模式更改为SustainedLowLatency,这样可以避免垃圾收集,除非系统耗尽。

GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency;

答案 1 :(得分:1)

您可能正在遇到限制,因为您正在以32位进程运行内存耗尽,只能处理~4GB内存。

尝试以64位进程运行(显式编译x64),或者生成多个副本。

也就是说,有更好的方法可以限制被测进程的可用内存。这里给出一个例子:Set Windows process (or user) memory limit