gpt4 book ai didi

c# - 极端内存条件测试 : How to saturate RAM?

转载 作者:可可西里 更新时间:2023-11-01 08:27:05 24 4
gpt4 key购买 nike

我想写一小段程序来启动线程,以线性方式消耗可用的 RAM 内存,直到达到一定水平,然后停止(理想情况下,暂停直到“足够”的内存被释放,然后继续创建线程, 依此类推。)

我尝试了以下操作,但是 list.Add(new byte[]) 需要连续的 RAM 空间并抛出一个 OutOfMemoryException,这不是我想要的模拟。

编辑:
我有一个多线程的内存消耗型应用程序,它占用了一大堆 RAM GB。我想要的只是在“实验室条件”中隔离/重现这种情况以解决它,即编写自适应内存监控/线程限制器草案。我正在使用 x64 操作系统和 x64 平台。说清楚:我想看到的结果是任务管理器内存监视器由于程序而直线上升。

    static void Main(string[] args)
{
ComputerInfo ci = new ComputerInfo();
D("TOTAL PHYSICAL MEMORY : " + Math.Round(ci.TotalPhysicalMemory / Math.Pow(10,9),3) +" GB");

//########### Fill Memory ###############
var list = new List<byte[]>();

Thread FillMem= new Thread(delegate()
{
while (Process.GetCurrentProcess().PrivateMemorySize64 < MAX_MEM_LEVEL)
{
list.Add(new byte[1024 * 10000]); //<- I Need to change this
Thread.Sleep(100);
}
});

FillMem.Start();

//########### Show used Memory ###############
Thread MonitorMem = new Thread(delegate()
{
while (true)
{
D("PROCESS MEMORY : " + Math.Round(Process.GetCurrentProcess().PrivateMemorySize64 / Math.Pow(10, 6), 3) + " MB");
Thread.Sleep(1000);
}
});

MonitorMem.Start();

Console.Read();
}

最佳答案

这个问题还是比较迷惑;我不清楚您要在这里做什么以及为什么。

如果您真的想消耗物理内存——也就是说,告诉操作系统不,真的不要使用机器中安装的这部分物理 RAM 芯片对于我所说的以外的任何事情——那么我可能会使用恰当命名的AllocateUserPhysicalPages从非托管代码运行。

这将减少可用于其他用途的物理内存量,迫使更多虚拟内存页面输出到页面文件。

除了让你机器上运行的所有程序都变慢之外,我不确定你打算通过这个来完成什么。你能澄清一下吗?

关于c# - 极端内存条件测试 : How to saturate RAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9070489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com