![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| shamber |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Здравствуйте всем!!!
есть файлик Excel xml размером ~ 6мб. я его парсю
получается что памяти выделилось допустим 30 мб. Дальше мне нужно пройтись по всем строкам в файлике за это отвечает тег Row если сделать так
то выделиться еще около 25 мб. Итого 55 метров. А хочется не выделять дополнительные 25 метров А можно ли как-то обойти их по одному, что то типа : findnode("Row") nextnode() ? Точнее мне кажется что можно, но я никак не могу понять как |
||||
|
|||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
shamber, может использовать SAX-парсер (например, XML::Twig)?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
спасибо, буду пробовать
|
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
? Добавлено @ 14:22 Хотя нет, не то. Наверное все-таки надо SAX-парсер использовать. Но на всякий случай померяйте вариант с использованием XML::LibXML::NodeList. Это сообщение отредактировал(а) KSURi - 19.8.2009, 14:28 -------------------- Died at Life.pl line 21 |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Вообщем глянул внимательно, понял что приврал
6 мб в Dom занимает 70 мб
прибавляет 1,5 мб. А в SAX(XML::Twig) как перейти к следующему элементу? т.е. first_child нашел, а следующий? Это сообщение отредактировал(а) shamber - 19.8.2009, 14:59 |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Предположу, что next_sibling. Либо можно children использовать, чтобы получить список. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Эх, Twig тормозит
|
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Чего-то не понимаю, подскажите где ошибка.
делаю так
А расход памяти увеличивается. |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
shamber, вроде все правильно делаешь. Насколько сильный расход памяти?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
ginnie, он конечно же меньше чем XML::LibXML.
Но для файла 6 мб, в начале старта скрипта памяти выделяется 9 мб. под конец работы уже 25 мб. Но не понятно мне почему она во время работы все время увеличивается. Добавлено через 44 секунды мне казалось что после purge память должна освобождаться |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
shamber, памяти должно использоваться сильно меньше чем в XML::LibXML, т.к. файл читается фрагментами. Надо несколько вызовов row() посмотреть и определить, когда память расходуется.
P.S. Я использовал XML::Twig для обработки xml-файла более 60 Мб, только особого внимания на расход памяти не обращал, т.к. для меня оно значения особого не имело. Это сообщение отредактировал(а) ginnie - 20.8.2009, 11:10 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| shamber |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
memori.log
Добавлено через 1 минуту и 13 секунд Я так понимаю не освобождается память после undef (@title); Добавлено через 2 минуты и 12 секунд хотя и после purge растет :( каждый Row приблизительно одного содержания. |
||||
|
|||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
shamber, уменьшения используемой памяти, вроде, быть не должно, т.к. интерпретатор ее системе не отдает. Не должно быть большого роста.
undef (@title); можно убрать, оно только замедляет работу, т.к. каждый вызов будет память заново выделяться. Это сообщение отредактировал(а) ginnie - 20.8.2009, 11:35 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
||||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
shamber, без undef (@title) память остается зарезервирована для функции, а так как эта функция в нашем случае вызывается много раз, то это хорошо.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |