【问题标题】:How can I hog memory to test another application?如何占用内存来测试另一个应用程序?
【发布时间】:2016-09-30 00:43:03
【问题描述】:

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

我创造了这个怪物:

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

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

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

或者:如何在我的通用 Windows 应用程序上测试内存不足的情况?

【问题讨论】:

  • 您是否必须编写自己的应用程序,那里有一些免费软件。例如TestLimit - how to use上的博客
  • 您是否尝试过从您的机器中拉出内存 DIMM?保留运行操作系统所需的最低限度。
  • @NotMe 我只有 2 个 DIMM,但这是一个有趣的想法。
  • 这种方式只能耗尽虚拟内存,不能耗尽物理内存。这应该没问题 - 虽然您需要先检查虚拟内存设置,设置一个合理的上限 - 但是当您说“它恢复正常”时,您可能测量的是错误的东西。

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


【解决方案1】:

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

GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency;

【讨论】:

    【解决方案2】:

    您可能遇到了您看到的限制,因为您将内存占用作为 32 位进程运行,它只能处理 ~4GB 的内存。

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-09
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 2013-11-07
      • 2011-06-08
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多