![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Нашёл шутку:
Работает одинаково при $use = 1 и undef ( ) ; `no DBI` память не освобождает. Как избавиться от DBI? Это сообщение отредактировал(а) tishaishii - 13.7.2012, 15:22 |
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
>Работает одинаково
Потому что use - команда времени компиляции, а if - времени исполнения. И ваш код, на самом деле, выглядит как
Почитайте perldoc -f use, perldoc perlmod. >память не освобождает И не должно. Что вы вообще хотите сделать? Это сообщение отредактировал(а) DurRandir - 13.7.2012, 17:51 |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Освободить память. Например, за счёт выгрузки модуля, который больше не нужен.
Предполагается много процессов одного и того же. |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
perl помнится, освобождать память не особо любит
|
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
1. Отличный кандидат на XY-вопрос месяца)
2. http://stackoverflow.com/questions/9145990...rom-child-stack - там не всё верно, но основную мысль доносит) 3. На десерт) Если перл собран с usemymalloc, то в систему он память не вернёт никогда (но с лёгкостью переиспользует для своих нужд) |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Class::Unload. Освободит ли это память хотя бы для переиспользования непонятно, нужно проверять.
|
|||
|
||||
| tishaishii |
|
||||||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Так вот. Без всяких if'ов выглядит, думаю:
Спасибо, может быть, всё-таки будет полезен модуль Class:Unload. Выполнил скрипт:
Итого. Вижу подходы к решению:
Комментарий ко 2му варианту. Тщательно проектировать, либо может ресурсов съесть больше, или раскидывать по разным машинам. Всё равно, тщательно проектировать. Вывод: оба варианта требуют достаточно много времени для доработки. А вот если в главном процессе использовался какой-то модуль, а в дочернем этот модуль может быть нужен, а может быть нет (зависит от запроса), то что делать? Это сообщение отредактировал(а) tishaishii - 16.7.2012, 07:26 |
||||||
|
|||||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
У меня когда была проблема с использованием тяжёлого, но редкоиспользуемого модуля, я её решил через system, т.е. написал отдельный скрипт на perl-e и вызывал его как внешнюю программу.
Во всех других случаях перл даже выгружая модуль память не отдаёт. Именно из-за политики складывания про запас надо так же быть внимательным с хранением больших данных в переменных. |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
То есть, вы предлагаете использование отдельного процесса для вычислений. Вот я подумал, в общем случае, сервер для этого может подойти. Хотя... если мелочь, конечно, с system проще. Вот как быть с DBI?
Или Config::General? Парсит конфиг, допустим, выдаёт его в каком-то формате в STDOUT и пишет в STDERR ошибки. Основной процесс читает STDOUT, который снова нужно парсить? Это сообщение отредактировал(а) tishaishii - 16.7.2012, 07:30 |
|||
|
||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
Тяжёлый модуль стоит отдельно выделять только если Вы его используете его весьма редко,
иначе будет много накладных расходов и Вы только потеряете в скорости работы. Весь вывод внешнего скрипта через STDOUT автоматически попадёт в Вашу переменную: my $answ = `perl скрипт.pl -a -b`; # тут обратные кавычки |
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
>разделять на потоки, вместо форков
Запасся попкорном Это сообщение отредактировал(а) DurRandir - 16.7.2012, 14:11 |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Сообщи что-нибудь, что поможет.
[hr] Протестировал Class::Unload. До сих пор точно сказать не смогу, но, кажется, всё-таки, освобождает память для повторного использования. Спасибо. |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |