Вверх ↑
Администрация
Ответов: 15295
Рейтинг: 1519
#1: 2009-11-27 21:48:54 ЛС | профиль | цитата
nesco писал(а):
Тормознутости хватает, но не думаю, что предложенная выше реализация (Type) будет работать быстрее

речь идет не о реализации Type - речь идет о работе схем, в которых это вообще не используется

nesco писал(а):
И как может лишнее поле сильно влиять на быстродействие, если мы передаем указатель на структуру, а не саму структуру, если только не копируем их, как при MT

рассмотрим простой код из Share.pas
#pas
procedure _hi_OnEvent(const PointEvent:THI_Event;Value:THiInt);
var Data:TData;
begin
dtInteger(Data,Value);
OnEvent(PointEvent,Data);
end;
казалось бы две строчки кода, к которым добавление нового поля ну никаким боком не относится. Однако вспоминаем, что тип string это тот же самый класс, для правильной работы которого нужно вызывать конструктор и деструктор (в С и С++ это можно было бы увидеть воочию открыв исходник класса), а точнее в Delphi вызывается InitArray для каждого строкового и массивного поля из общего метода InitRecord. Отсюда получаем, что добавление <field>:string в структуре TData приведет как минимум к вызову одной лишней подпрограммы во всех методах, в которых есть локальные переменные TData вне зависимости от того, как где и когда они используются. На самом деле добавление поля sdata это уже было неверным решением, хоть и дающем в последствии некоторую простоту обращения с типом.
карма: 27
0