Задать вопрос

Как из программы на C# измерить RAM?

Добрый день.
Решил в цикле забить память компьютера, используя код ниже. Ожидал, что программа выпадет в 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.
  • Вопрос задан
  • 401 просмотр
Подписаться 3 Средний 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Операционка не будет трогать физическую память до тех пор, пока в нее что-то реально не запишут - навыделять вы можете сколько угодно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы