我怎样才能占用内存来测试另一个应用程序?
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
所以我想在低内存条件下测试我的 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