Проблема: Рост потребляемой памяти при работе с WMI.
Вот пример:
Проблема в том, что со временем (в данном примере это видно уже через минуту) начинает расти потребление памяти. Как этого избежать? |
Вообще то не обязательно использовать столько циклов, просто переделываем функцию немного(?):
Код:
#include <Array.au3> |
Спасибо за исправленный вариант, но проблема в том, что если процесс периодически выполняет ф-ю _ProcessesGetOwner() (например, как в моем примере выше сунуть для наглядности в бесколечный луп), то объем занимаемой памяти неуклонно растет. И чем меньше слип, тем быстрее.
У меня на серваке крутится скрипт, который через пол дня начинает заметно жрать память. Бывало, что по несколько сотен метров, если его не перезапускать. |
Создай сам объект вне функции. И пропиши его в качестве параметра для функции.
|
SyDr, Точно! Помогло.
А с чем сей косяк связан? Вот пример, если кому не понятно будет: Код:
$objWMI = ObjGet("winmgmts:\\.\root\cimv2") |
Скорее всего с тем, что сам объект всё ещё остаётся в памяти. Ты каждый раз при вызове функции создаёшь новый объект. Однако, похоже, что даже если он является локальным - после выхода из функции он не уничтожается. Вторым вариантом могу предложить обнулять переменную-объект перед выходом из функции. Вроде бы так тоже можно избавиться от роста потребляемой памяти. Поправьте меня, если я не прав. Однако, если объект испольузется больше двух раз - зачем постоянно создавать новый?
По русски всё выглядит так (ну, допустим, ты используешь объект 5 раз): Какой вариант использовать - решать тебе :) |
Цитата:
Интересно, какой будет результат, если $colProcs тоже сделать глобальным? :) |
SyDr,
Цитата:
|
Время: 00:07. |
Время: 00:07.
© OSzone.net 2001-