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