Оптимизирую свое творчество, столкнулся с проблемой.
При оптимизации выделенная память начинает бурно расти, превышает объем физической памяти, после чего комп, естественно, морозится, и приходится прекращать оптимизацию (либо даже просто убивать АД). После прекращения оптимизации память освобождается очень медленно, время исчисляется минутами (~5 минут и более)!
Пробовал в 3-х вариантах.
Код: Выделить всё
function Initialize()
{
...
AddGlobalVariable("Cnt", Types.Int, 0);
}
function OnUpdate()
{
if((int)Cnt==0)
{
if(...) // проверка соотношения параметров скрипта
Stop(); // вариант 1 - самый быстрый
// return; // вариант 2 - помедленнее, т.к. проходится по всему заказанному периоду тестирования, но ничего не делает
// вариант 3 - позволить работу с неверным соотношением, самый медленный; делает всё, что прописано в скрипте
Cnt++;
}
...
}
Проверка соотношения параметров скрипта делается для того, чтобы пропускать бессмысленные сочетания параметров, которые перещелкивает тестировщик (вроде SMAfast>=SMAslow).
Самый плохой вариант - первый (память загаживается почти мгновенно), затем второй (помедленнее), затем третий (но все равно не спасает).
Из сделанных наблюдений прихожу к выводу, что проблема м.б. в сборщике мусора. Похоже, что он работает слишком лениво и не успевает очищать память после отработки очередной "точки" тестирования.
Вопрос: реально ли из скрипта прочесть размер занимаемой памяти и вручную вызвать GC, если он становится слишком велик?
Если да, то большая просьба показать, как это сделать.
TIA.