Я хотел бы написать небольшую часть программы, которая запускает потоки, потребляет доступную оперативную память линейным образом до определенного уровня и останавливается (в идеале, паузы, пока "достаточная" память не будет освобождена и продолжит создавать потоки после этого, и т.д.)
Я пробовал следующее, но list.Add(new byte[])
требует непрерывного пространства RAM и исключает исключение OutOfMemoryException, которое НЕ является тем, что я пытаюсь имитировать.
РЕДАКТИРОВАТЬ:
У меня есть многопоточное приложение для голодания, которое питает целую кучу RAM GB. Все, что я хочу, - это изолировать/воспроизвести эту ситуацию в "Лабораторных условиях", чтобы решить ее, то есть написать адаптивный проект мониторинга мембран/нит-ограничителя. Я использую x64 OS для платформы 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();
}