У нас есть две системы для тестирования, обе работают под управлением последней версии Win10 Pro.Один из них имеет 8 ГБ ОЗУ, другой 32. Мы запускаем один и тот же двоичный файл и выполняем одинаковые операции в каждом из них.
Использование памяти программой (как показано в диспетчере задач) в системе 32 ГБдоходит до 2,5 ГБ и остается там с некоторым "шумом", вызванным ГХ, как и ожидалось.
В системе 8 ГБ программа использует столько памяти, сколько может, и когда используется глобальная памятьдостигает около 90-95%, похоже, проходит массовый проход GC.Объем используемой памяти колеблется от 1,5 до 5 ГБ.Другие процессы заменяются, и, вообще говоря, система в конечном итоге начинает замедляться.Если вы выйдете из программы или остановите ее и нажмете кнопку GC.Collect()
, которую мы взломали для этого теста, все вернется к норме, когда все поменяется местами.Если это полезно, pagefile.sys настроен как «управляемый Windows» и занимает около 8 ГБ, а Windows рекомендует вместо него 1,8 ГБ (но не вносит изменения).
Какие настройки, .NET или Windowsможет быть причиной этого?Мы не делаем ничего особенного с GC из нашего кода, кроме той кнопки отладки, которая упоминалась выше.У нас есть несколько GC.KeepAlive()
вызовов, но те по определению ничего не делают, просто расширяют область видимости переменной.В противном случае программа не имеет утечек памяти, мы можем продолжать ее работать бесконечно, и она никогда не выйдет из памяти.