Добрый день.
Решил в цикле забить память компьютера, используя код ниже. Ожидал, что программа выпадет в OutOfMemoryException, и сохранит объем выделенной памяти в файл. Но не тут-то было. Программа работает и работает "выделяя" невероятные объемы ram. На 1024000 остановил.
Я что-то не так посчитал? Или dotnet что-то хитро колдует? Как так получается?
var mem = List<byte[]>(); //каждый элемент списка == byte[1024*1024] == 1Mb
while (true)
{
try
{
if(mem.Count % 1024 == 0)
{
sizelog(mem.Count); // запись размера в файл
}
mem.Add(new byte[1024*1024]); // 1Mb выделяется в память
}
catch (OutOfMemoryException)
{
sizelog(mem.Count);
}
}
Upd. Запустил нечто подобное рекурсивно,
public static void runTestRec(int count)
{
try
{
var Mb = new byte[1024*1024];
count ++;
if(count % (1024) == 0)
{
sizelog(count);
}
}
catch (OutOfMemoryException)
{
sizelog(count);
}
runTestRec(count);
}
Крашнулось на 64Gb, все равно не сходится. У меня есть только 16Gb.