Ускорение TStream.ReadComponent

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ускорение TStream.ReadComponent

Сообщение Игорь Ковалев » 25.10.2007 15:21:26

Исследовал возможность ускорения TStream.ReadComponent для Turbo Delphi.

Возможно это пригодится и для Lazarus - при просмотре кода в непоследней
версии VCL Lazarus обнаружил решения, похожие на решения в VCL Delphi.

В моем тесте компонент загружался за 2.8 секунды из файла объемом 1.7 Мб.
Оказалось, что поиск класса по имени выполняется небинарный. После переделки
поиска на бинарный время загрузки уменьшилось до 2 секунд. Для этого тип
поля TRegGroup.FClassList модуля Classes.pas поменял с tList на
tStringList. Запрос на такое изменение в модуле Classes оформил через
Codegear Quality Central.
Далее оказалось, что довольно много времени занимает вызов
Notification из tComponent.InsertComponent. В целях эксперимента в
наследнике tComponent переопреднлил tComponent.Notification, в котором
при операции opInsert ничего не делается, в результате компонент загрузился нормально,
время загрузки 0.4 секунды. Понятно, что такое перекрытие Notification
можно делать не всегда.
Игорь Ковалев
незнакомец
 
Сообщения: 2
Зарегистрирован: 25.10.2007 10:39:48
Откуда: Краснодар

Сообщение Павел Ишенин » 26.10.2007 05:02:04

А можно patch для FPC в баг-трекер? Я думаю применят если есть прирост скорости.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Сообщение Игорь Ковалев » 26.10.2007 08:30:50

На данный момент есть только patch для classes.pas из VCL Delphi. Дело в том, что с Lazarus я практически не работал - проводил только некоторые эксперименты, сделать patch для FPC для меня не просто. Если нетрудно, напишите, что нужно для внесения patch для FPC в баг-трекер - url, возможно правила оформления, от какой версии исходных текстов отталкиваться и как эту версию получить.
Игорь Ковалев
незнакомец
 
Сообщения: 2
Зарегистрирован: 25.10.2007 10:39:48
Откуда: Краснодар

Сообщение Павел Ишенин » 26.10.2007 09:21:07

1. Версия fpc берется через svn (http://svn.freepascal.org/svn/fpc/trunk) и относительно trunk делается patch (в tortoise svn все довольно просто).

2. Баг трекер http://www.freepascal.org/mantis/ Там надо зарегистрироваться чтобы работать.

3. classes.pas - это в fpc (т.к. это rtl, а Lazarus его просто использует)
\rtl\objpas\classes\classesh.inc
\rtl\objpas\classes\classes.inc

Если что, то тут есть ребята которые пишут патчи для fpc (а некоторые даже в команду входят. я - не из их числа).
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Сообщение Sergei I. Gorelkin » 26.10.2007 09:39:47

Аккуратнее надо с Notification... Для отдельно взятого своего компонента оно работать почти наверняка будет, но, отменяя opInsert глобально, поломаешь компоненты, которые в нем что-то делают (а они в природе есть).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 39

Рейтинг@Mail.ru