Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Почему возникают тормоза при переходе от массива к такой схеме ?   Найти похожие ветки 

 
AIms   (2005-08-24 01:36) [0]

Было:
AIms : array of TAIms;

Cтало :

FAIms : array of TAIms;

property AIms[Index: Integer]: TAIms read GetObject write SetObject;

Всё нормально работает, но тормозит жутко, не понимаю почему. Это чего, просто такая тормозная конструкция, или что-то ещё ? И главное, можно ли это как нибудь ускорить ?


 
Defunct ©   (2005-08-24 01:47) [1]

причина возможно здесь:

GetObject/SetObject

код приведите.


 
AIms   (2005-08-24 02:02) [2]

Там ничего нету. Только загрузка при первом обращении :

Вроде так :

function  TAi2.GetObject(Index: Integer): TAIms;
begin
 if not isLoad then begin
   isLoad := True;
   LoadIt;
 end;
 Result := FAIms[Index];
end;

procedure TAi2.SetObject(Index: Integer; Value: TAIms);
begin
 FAIms[Index] := Value;
end;


 
Defunct ©   (2005-08-24 03:59) [3]

Это что?

if not isLoad then begin
  isLoad := True;
  LoadIt;
end;


без этого тоже тормозит?


 
Джо ©   (2005-08-24 04:02) [4]


>  [3] Defunct ©   (24.08.05 03:59)

Lazy load.
То бишь, загрузка актуальных данных только после первого обращения к свойству. Я так понимаю.


 
AIms   (2005-08-24 04:12) [5]

Отбой тревоги. :) Перезагрузился и всё нормально заработало. Видимо просто глюк какой то был. Очень надеюсь, что повторяться он не будет.


 
Defunct ©   (2005-08-24 05:10) [6]

> Джо

IsLoad это больше на название функции похоже, или свойства.
как для флага Loaded должно было быть.


 
Джо ©   (2005-08-24 05:22) [7]


>  [6] Defunct ©   (24.08.05 05:10)

Да, название неудачное. И вообще, установку флага я производил бы в методе LoadIt.


 
TUser ©   (2005-08-24 06:18) [8]

А SetLength где?


 
Anatoly Podgoretsky ©   (2005-08-24 09:42) [9]

Код очень опасный отсутствует контроль индексов.


 
GuAV ©   (2005-08-24 14:19) [10]

Anatoly Podgoretsky ©   (24.08.05 9:42) [9]

Откуда Вы можете знать, что отсутствует контроль индексов ?


 
Alexander Panov ©   (2005-08-24 14:22) [11]

if not isLoad then begin
  isLoad := True;
  LoadIt;
end;
Result := FAIms[Index];


Длина FAIms может быть нулевой


 
КаПиБаРа ©   (2005-08-24 14:30) [12]

Контроль индексов не всегда нужен. Лазиют же некоторые по скалам без страховки.


 
GuAV ©   (2005-08-24 14:44) [13]

Alexander Panov ©   (24.08.05 14:22) [11]
Длина FAIms может быть нулевой


И тогда не будет ERangeError при {$R+} ?


 
evvcom ©   (2005-08-24 17:10) [14]


> И тогда не будет ERangeError при {$R+} ?

Будет, но...
Поскольку используется проперть, значит предполагается ее дать кому-то использовать, а этот кто-то может R+ изменить на R- c вытекающими.


 
Sapersky   (2005-08-24 17:57) [15]

Type
 TImsArray = array of TAIms;

FAIms : TImsArray;
property AIms: TImsArray read FAIms;

Смертельный номер :)
Зато по скорости наилучший вариант. Жалко, default с ним не действует.


 
jack128 ©   (2005-08-24 18:42) [16]

evvcom ©   (24.08.05 17:10) [14]
Поскольку используется проперть, значит предполагается ее дать кому-то использовать, а этот кто-то может R+ изменить на R- c вытекающими.

$R - локальная директива, область действия которой ограничена текущим модулем..


 
AIms   (2005-08-25 03:30) [17]

А почему теперь : AIms[0].name := "blablabla"; не действует ?


 
Fay ©   (2005-08-25 05:10) [18]

2 КаПиБаРа ©   (24.08.05 14:30) [12]
>> Контроль индексов не всегда нужен. Лазиют же некоторые по скалам без страховки.
Си-шники называются


 
Aims   (2005-08-25 05:27) [19]

Есть там контроль индексов. Что мне сюда весь проэкт запостивать что ли ?


 
AIms   (2005-08-31 06:43) [20]

AIms   (25.08.05 03:30) [17]
А почему теперь : AIms[0].name := "blablabla"; не действует ?


 
КаПиБаРа ©   (2005-08-31 07:45) [21]

Что значит не действует?


 
tesseract ©   (2005-08-31 21:49) [22]

А чем всё же Tlist не нравится? Для этого и предназначен.



Страницы: 1 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
14-1126873033
Mike B.
2005-09-16 16:17
2005.10.09
На деревню дедушке


6-1118748923
atmospheric
2005-06-14 15:35
2005.10.09
Отправка сообщения конкретному клиенту?


5-1101835909
Ranger
2004-11-30 20:31
2005.10.09
Тестирование интерфейса времени проектирования


6-1118663749
Новичек
2005-06-13 15:55
2005.10.09
Странная ошибка сокета 10035.


8-1116324008
slim
2005-05-17 14:00
2005.10.09
direct draw. определение устройств и видеорежимов