Учёт используемой памяти и сборка мусора
Автор: Misha v.3 [28 октября 2010]
Версия: 1.5
Тэги: Память
Ну вот, приехали... И тут дожили до сборки мусора... Ну а кто обещал что будет совсем легко? В общем пользоваться ей совершенно не обязательно, но иногда наступает момент когда она может пригодиться. Родной ^memory:compact[] никто не отменял, но вызывать его при каждом чихе не стоит, т.к. упоминаемая операция не сказать что очень быстрая.
И тут может помочь предлагаемый класс Erusage.p, в задачу которого в принципе входит абсолютно то-же самое: периодические вызовы ^memory:compact[], но делать он это будет не постоянно. И в добавок к этому он будет накопливать простенькую статистику, которая может вам пригодиться.
Как обычно все просто: скачиваете архив, распаковываете его, подключаете Erusage.p в корневом auto.p и в местах, после которых как вам кажется надо бы пособирать мусор, вызываете ^Erusage:compact[] вместо обычного ^memory:compact[]. Все. :)
И что это даст? Дело в том что класс будет вызывать парсерный ^memory:compact[] только тогда, когда с момента последней сборки мусора будет использовано памяти больше, чем значение $iLimit (по умолчанию 2048 КБ), в противном случае ничего делаться не будет (кроме учета количества вызовов). Значение $iLimit можно изменить с помощью вызова статического метода ^Erusage:init[$.iLimit(4096)].
Если в очередной точке пространственно-временного континиума вашего кода вы решите, что тут нужно обязательно выполнить самый что ни на есть настоящий ^memory:compact[], то смело зовите ^Erusage:compact[$.bForce(1)] и он будет выполнен, век воли не видать :)
А на последок в @postprocess[] вы можете вызвать ^Erusage:print[] и вывести накопленные результаты на экран (или в файл, если вызовете ^Erusage:print[$.sFile[путь/к/файлу.log]]).
А ещё из @postprocess[] можно вызвать ^Erusage:log[$.sFile[/путь/к/erusage.log]] и класс в лог запишет время формирования страницы и израсходованную память (ну и ещё кое какие полезные мелочи).
Вот теперь совсем всё :)
Скачать:
Erusage.zip
(15.03.2009
1,4 КБ)
Архив класса.