Исследовал возможность ускорения 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
можно делать не всегда.
Ускорение TStream.ReadComponent
Модератор: Модераторы
-
Игорь Ковалев
- незнакомец
- Сообщения: 2
- Зарегистрирован: 25.10.2007 10:39:48
- Откуда: Краснодар
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
-
Игорь Ковалев
- незнакомец
- Сообщения: 2
- Зарегистрирован: 25.10.2007 10:39:48
- Откуда: Краснодар
На данный момент есть только patch для classes.pas из VCL Delphi. Дело в том, что с Lazarus я практически не работал - проводил только некоторые эксперименты, сделать patch для FPC для меня не просто. Если нетрудно, напишите, что нужно для внесения patch для FPC в баг-трекер - url, возможно правила оформления, от какой версии исходных текстов отталкиваться и как эту версию получить.
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
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 (а некоторые даже в команду входят. я - не из их числа).
2. Баг трекер http://www.freepascal.org/mantis/ Там надо зарегистрироваться чтобы работать.
3. classes.pas - это в fpc (т.к. это rtl, а Lazarus его просто использует)
\rtl\objpas\classes\classesh.inc
\rtl\objpas\classes\classes.inc
Если что, то тут есть ребята которые пишут патчи для fpc (а некоторые даже в команду входят. я - не из их числа).
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
