parser

Учёт используемой памяти и сборка мусора

Автор: 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 КБ)
Архив класса.