【问题标题】:Set artificial memory restrictions设置人工​​记忆限制
【发布时间】:2013-07-17 03:29:17
【问题描述】:

我正在编写一个小的 PerformanceTest 程序,并尝试人为地限制可在测试期间使用的内存。在处理高达 100 GB 的多分辨率图像时,一些测试需要几个小时才能运行。

理想的做法是为每个线程设置限制,但我认为这行不通。测试在单独的进程或单独的 AppDomain 中执行。我知道如何使用 ARM 和 ETW 监控(但不限制)AppDomain 的资源,并且我尝试在进程级别设置 MaxWorkingSet,但这在系统内存处于压力之下之前无效。

当然,还有其他方法和变通方法可以完成此操作,例如通过在 VM 中运行测试或在启动选项上限制 Windows 内存。启动分配大量内存的第二个进程。

即使系统上有可用的可用物理内存,是否有任何方法可以人为地限制进程/AppDomain 可以使用的物理内存?是否也可以限制虚拟内存?

【问题讨论】:

    标签: c# .net memory memory-management


    【解决方案1】:

    不知道有任何此类功能可用,但我会限制内存消耗(与使用情况相反)。

    因此,当您启动测试时,它会有一个计数器来记录它可以创建和操作的对象/线程数。如果计数器值达到其最大允许值,则测试将等待,直到其中一个线程/对象完成作业。

    如果你使用Parallel 类,你可以set the max degree of parallelisation

    【讨论】:

    • 谢谢。测试是按顺序执行的,而不是并行执行的,以避免它们相互影响。我正在使用不同的 Performancecounters 来监控资源,但我想看看测试的函数是否在内存较少的系统中进行扩展,以及如果系统需要交换,其行为如何。
    • 即使我不喜欢这个答案,它似乎也是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多