我怎样才能占用内存来测试另一个应用程序?

How can I hog memory to test another application?

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

我创造了这个怪物:

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

但它只有 3.7 GB。然后我打开此应用程序的另一个实例,它又恢复正常。

如何防止垃圾收集器收集我的分配?

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

您可以尝试将 GCSettings 延迟模式更改为 SustainedLowLatency,这将完全避免垃圾收集,除非系统 运行 退出。

GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency;

您可能 运行 达到了您看到的限制,因为您 运行 作为 32 位进程,您的内存占用很大,只能寻址 ~4GB 内存。

尝试 运行 作为 64 位进程(明确为 x64 编译),或产生多个副本。

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