Скажите mono / .NET использовать только X объем памяти? - PullRequest
0 голосов
/ 06 октября 2011

Я написал два приложения, и оно сидит на моем сервере.Между двумя из них они используют 1/3 моего барана.Когда я делаю новую пробежку, они занимают только 1/8 моего барана, что является довольно резким изменением.Есть ли способ, которым я могу сказать моно или использовать .NET, чтобы сказать, запускать GC каждый час, даже если он думает, что это не нужно?Я не знаю, используется ли большая часть оперативной памяти в качестве кеша sqlite, но мне это действительно не нужно.

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Звонить System.GC.Collect() - это страшное дело и почти всегда не нужно ... GC действительно очень хорош.Это хорошо написано.Он работает как правильно, так и эффективно большую часть времени.Принудительное выполнение GC - это , часто полосатое сверх другие проблемы .

Как вы определяете объем используемой памяти ?То есть он просто выделил столько места?Или это на самом деле использует столько места?Кто-нибудь из этого поменялся?И т.д.

Использовали ли вы монофоническое профилирование , чтобы определить, что происходит?

Вы упомянули кеш SQLite: вы уверены, что удаляете все корниобъекты, которые вы кешируете?Без этого никакое количество ГХ никогда не освободит эту память.

1 голос
/ 07 октября 2011

Не полностью связано с заголовком вопроса, но связано с описанием.Вы можете форсировать коллекцию используя GC.Collect () .Вы также можете попробовать использовать второй моно сборщик мусора, то есть sgen (просто запустите mono-sgen вместо mono).

...