OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 18:11

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Среда, 11 Июнь, 2008 14:59 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Petryxa писал(а):
Прикрутил модуль StringsBase через обёрточный модуль(чисто на всякий случай :) ) к Xmlcore. Результат: злополучный 4-хметровый SVG был прочитан в память за 20 секунд и записан за 0.7 секунд. Пример показателен тем, что в SVG длина строковых значений параметров может быть порядка 10000 знаков, тогда как узлов будет всего несколько десятков штук, что при посимвольном наборе строки может значительно влиять на время прочитывания xml-файла в целом.


Гиде SVN? StringsBase уже неактуален, у меня новый модуль завёлся - грузит тот же файл за ~860 msec :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Июнь, 2008 15:22 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Круто. Положили бы его в форум, не всё ли равно...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Июнь, 2008 15:27 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Petryxa писал(а):
Круто. Положили бы его в форум, не всё ли равно...


Кажется он. Кстати, забавную штуку обнаружил: если несколько раз выполнить загрузку файла буз выгрузки модуля/освобождения памяти - время загрузки вырастает примерно в два раза (т.е. 860-1400-2100-...). Интересно, это глюк нового варианта или что?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Июнь, 2008 15:41 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Иван Горячев писал(а):
время загрузки вырастает примерно в два раза (т.е. 860-1400-2100-...)


Такое же было с StringsBase - я вроде о таком явлении говорил вскользь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Июнь, 2008 15:52 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Иван Горячев писал(а):
Гиде SVN? StringsBase уже неактуален, у меня новый модуль завёлся - грузит тот же файл за ~860 msec :)


Прикрутил StringsXml к парсеру по-быстрому(обёртки - рулят). 4-хметровый загрузился за 2 секунды - отлично! При повторных загрузках время выросло до 5 секунд и больше не росло.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Июнь, 2008 15:59 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Petryxa писал(а):
Иван Горячев писал(а):
Гиде SVN? StringsBase уже неактуален, у меня новый модуль завёлся - грузит тот же файл за ~860 msec :)


Прикрутил StringsXml к парсеру по-быстрому(обёртки - рулят). 4-хметровый загрузился за 2 секунды - отлично! При повторных загрузках время выросло до 5 секунд и больше не росло.


В ББ есть профилировщик - нужно его на систему натравить. Замедление связано скорее всего с особенностями выделения памяти. Ну и потом я там ещё в парсере оптимизации наметил, будет SVN - поправлю

Кстати, посмотрел что у меня за проц - Core2 Duo T7200 2 Ггц


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Июнь, 2008 16:23 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Иван Горячев писал(а):
Ну и потом я там ещё в парсере оптимизации наметил

Опишите примерно?

Тем временем, появился SVN-репозитарий. Я загрузил туда подсистемы Dom и Xmlcore. Логика SVN определяет правила разработки С ветками разработки я ещё пока сам не разобрался :) но тоже может пригодиться. Понеслась!!!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 00:10 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Petryxa писал(а):
доступ к конткретному символу(BasicsDynStrings.Char)

Посмотрел в код. Вроде бы этот доступ используется только в Parser. Причем доступ - последовательный, не произвольный.

Интересная задача, но счас времени нету совсем самому попробовать. :(

Иван, Пётр, у меня такое предложение:
- использовать считыватель для чтения строки вместо доступа к конкретному символу;
- строку хранить не как массив из кусков ARRAY StrSize OF CHAR, а как список из этих кусков (я бы взял фиксированный размер куска). При последовательном доступе чтение след. символа будет занимать фикс. время и, мне кажется, будет быстрее, чем GetChar.
Код:
TYPE
   Data = POINTER TO RECORD
      s: ARRAY defStrSize OF CHAR;
      next: Data
   END;

   String* = POINTER TO LIMITED RECORD
      len- : INTEGER;
      data : Data
   END;

VAR
   free: Data;

- при убиении строки финализатор будет передавать её куски в список свободных кусков простым добавлением в начало, откуда их потом можно будет забирать (опять же с начала) при потребности в новом куске для расширения строки (обходимся без NEW).
Копить, напр, до опред. числа кусков.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 00:19 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Petryxa писал(а):
Тем временем, появился SVN-репозитарий. Я загрузил туда подсистемы Dom и Xmlcore. Логика SVN определяет правила разработки С ветками разработки я ещё пока сам не разобрался :) но тоже может пригодиться. Понеслась!!!


Когда-то Александр Ильин писал(а):


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 04:03 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Не удержался, переделал StringsXml вот в такую бодягу.Но чтой-то на ночь глядя не пошло. Память куда-то отжирается.

вложение удалено

Сначала думал на финализаторы - "It is not recommended to re-anchor an object in its finalizer...". Но re-anchor делается не на сам объект, а на его поле у которого нету финализатора. Так что может и пойдет такая штука...

Но убрал и финализаторы, и SYSTEM (вдруг косяк с адресами), все равно память отжирается :cry:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 06:21 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Я положил в SVN последний вариант Петра, пока без динамических строк.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 08:01 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Евгений Темиргалеев писал(а):
Не удержался, переделал StringsXml вот в такую бодягу.
Вложение:
Xml.odc
Но чтой-то на ночь глядя не пошло. Память куда-то отжирается.


Почему бы не залить наконец StringsXml в SVN?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 08:48 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Petryxa писал(а):
Почему бы не залить наконец StringsXml в SVN?


У меня нормальный интернет с svnом на работе, а этот модуль - дома :? Завтра залью.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 15:22 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Добавил в SVN Strings\Mod\Xml. И свою версию Strings\Mod\Xml2. Вот хоть убей не пойму:
Код:
PROCEDURE Test2*;
   VAR s : String; k: INTEGER; r: Reader;
BEGIN
   FOR k := 0 TO 1000 DO
      s := Create("1234567890");
      r := NewReader(s);
      r.Read;
      WHILE ~r.eos DO
         Log.Char(r.ch);
         r.Read
      END;
   END
END Test2;

Если есть вывод Log.Char(r.ch) - память съедается. Нет вывода в лог - не съедается. :roll:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 15:29 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Ага, действительно.
Может, Лог каким-то образом умудряется записать данные в область, где лежат, или должны лежать строки?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 16:34 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Да врят ли проблема в логе...

Евгений Темиргалеев писал(а):
мне кажется, будет быстрее, чем GetChar.
Когда написал появились сомнения. Посмотрел декодированный вариант, ридер чуть получше. Однако если отказаться от переменного s.strSize и оставить константу равную степени двойки, GetChar укорачивается в два раза (нет обращения к полю и деление заменяется сдвигом).

Так что полезность моего варианта, если заработает, ещё под вопросом...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 12 Июнь, 2008 17:21 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Основной затык скорости приходился на посимвольный набор строки, с посимвольным выделением памяти... Я в парсере делал временную затычку с длинным буфером(статическая строка 5-10 килосимволов) - на тех файлах, которые удавалось таким образом прочитать, выйгрыш в скорости был ощутимый.
Теперь строки вроде нормально работают без затычки даже. Может, поискать узкие места в самом алгоритме парсера/сканнера?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 13 Июнь, 2008 03:08 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Petryxa писал(а):
Основной затык скорости приходился на посимвольный набор строки, с посимвольным выделением памяти... Я в парсере делал временную затычку с длинным буфером(статическая строка 5-10 килосимволов) - на тех файлах, которые удавалось таким образом прочитать, выйгрыш в скорости был ощутимый.
Теперь строки вроде нормально работают без затычки даже. Может, поискать узкие места в самом алгоритме парсера/сканнера?


Когда я говорил про оптимизации - имел ввиду две вещи:

1. Создание пустых строк заменить на присваивание StringsXml.null. Меньше вызовов NEW и фрагментация памяти
2. Ввести процедуру StringsXml.Compare - избавимся от этого непонятного буфера в XmlcoreScanner.ScanContent и опять же выкинем NEW.

За сам алгоритм ничего сказать не могу - там, в отличие от строк, думать надо :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 13 Июнь, 2008 03:11 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Евгений Темиргалеев писал(а):
Однако если отказаться от переменного s.strSize и оставить константу равную степени двойки, GetChar укорачивается в два раза (нет обращения к полю и деление заменяется сдвигом).


Я ввёл переменную для возможности подстройки размеров буфера под конкретный файл. Можно ввести константы, но тогда нужно выбирать для них оптимальные значения


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 13 Июнь, 2008 12:04 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Иван Горячев писал(а):
Когда я говорил про оптимизации - имел ввиду две вещи:
1. Создание пустых строк заменить на присваивание StringsXml.null. Меньше вызовов NEW и фрагментация памяти
2. Ввести процедуру StringsXml.Compare - избавимся от этого непонятного буфера в XmlcoreScanner.ScanContent и опять же выкинем NEW.
За сам алгоритм ничего сказать не могу - там, в отличие от строк, думать надо :)


Про пустые строки: Сделал такое внутри DomStrings, только там используются пустые строки при инициализации пустых полей узлов. Особого прироста в скорости нету. Может, надо что-то глобально переделать...

Про непонятный буфер: он используется только в случае, если в тексте встречается комбинация символов "<$". Достаточно редкая комбинация, сейчас, при тестах она особо не влияет на скорость.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB