Здравствуйте, хотел бы задать вопрос, почему среда pascalabc со временем “наедает” так много памяти. После часа работы уже подходит к ~ 600мб. А процесс pascalabc.exe вообще приходится через диспетчер задач убивать иногда.
Полагаю, это какие-то Ваши местные проблемы. У себя такого не наблюдаю абсолютно.
У меня так только при разработке в режиме windows forms
.NET забирает свободную память если она есть. Если памяти становится мало, то включается сборщик мусора. Поэтому NET достаточно прожорлива.
Мы поступаем так: когда память становится больше некоторого порогового значения, процесс pabcnetc.exe убивается и запускается снова. В качестве порогового значения стоит я не помню сколько, но около полугигабайта - гигабайта. Для современных компьютеров это немного.
Нет, это Java себя так ведёт. .Net чистит память даже когда её хватает. Это делается редко, но .Net подтребляет не на много больше памяти чем её надо.
На самом деле дело в 2 разных проблемах:
-
Исполняемые файлы созданные рефлекцией остаются в памяти после сохранения на диск. Есть альтернативные варианты с использованием доменов (
System.AppDomain
), но в случае компилятора не поможет - потому что в каждом домене придётся инициализировать компилятор заново. Решение с перезапуском процесса компилятора таки лучше. -
В анализаторе кода есть утечки памяти. Есть некоторые зацепки, где их можно начать ловить, но никто пока этим заниться не хочет. Каждый раз когда что то меняется в коде - анализатор кода пересоздаёт своё представление кода, чтобы показывать подходящие подсказки. Но, наверное, какие то ресурсы предыдущего представление не отпускаются.