![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему возникают тормоза при переходе от массива к такой схеме ? [D7]
AIms © (2005-08-24 01:36:00)Было:
AIms : array of TAIms;
Cтало :
FAIms : array of TAIms;
property AIms[Index: Integer]: TAIms read GetObject write SetObject;
Всё нормально работает, но тормозит жутко, не понимаю почему. Это чего, просто такая тормозная конструкция, или что-то ещё ? И главное, можно ли это как нибудь ускорить ?
tesseract (2005-08-31 21:49:00) [1]А чем всё же Tlist не нравится? Для этого и предназначен.
КаПиБаРа (2005-08-31 07:45:00) [2]Что значит не действует?
AIms (2005-08-31 06:43:00) [3]AIms (25.08.05 03:30) [17]
А почему теперь : AIms[0].name := 'blablabla'; не действует ?
Aims (2005-08-25 05:27:00) [4]Есть там контроль индексов. Что мне сюда весь проэкт запостивать что ли ?
Fay (2005-08-25 05:10:00) [5]2 КаПиБаРа © (24.08.05 14:30) [12]
>> Контроль индексов не всегда нужен. Лазиют же некоторые по скалам без страховки.
Си-шники называются
AIms (2005-08-25 03:30:00) [6]А почему теперь : AIms[0].name := 'blablabla'; не действует ?
jack128 (2005-08-24 18:42:00) [7]evvcom © (24.08.05 17:10) [14]
Поскольку используется проперть, значит предполагается ее дать кому-то использовать, а этот кто-то может R+ изменить на R- c вытекающими.
$R - локальная директива, область действия которой ограничена текущим модулем..
Sapersky (2005-08-24 17:57:00) [8]Type
TImsArray = array of TAIms;
FAIms : TImsArray;
property AIms: TImsArray read FAIms;
Смертельный номер :)
Зато по скорости наилучший вариант. Жалко, default с ним не действует.
evvcom (2005-08-24 17:10:00) [9]
> И тогда не будет ERangeError при {$R+} ?
Будет, но...
Поскольку используется проперть, значит предполагается ее дать кому-то использовать, а этот кто-то может R+ изменить на R- c вытекающими.
GuAV (2005-08-24 14:44:00) [10]Alexander Panov © (24.08.05 14:22) [11]
Длина FAIms может быть нулевой
И тогда не будет ERangeError при {$R+} ?
КаПиБаРа (2005-08-24 14:30:00) [11]Контроль индексов не всегда нужен. Лазиют же некоторые по скалам без страховки.
Alexander Panov (2005-08-24 14:22:00) [12]
if not isLoad then begin
isLoad := True;
LoadIt;
end;
Result := FAIms[Index];
Длина FAIms может быть нулевой
GuAV (2005-08-24 14:19:00) [13]Anatoly Podgoretsky © (24.08.05 9:42) [9]
Откуда Вы можете знать, что отсутствует контроль индексов ?
Anatoly Podgoretsky (2005-08-24 09:42:00) [14]Код очень опасный отсутствует контроль индексов.
TUser (2005-08-24 06:18:00) [15]А SetLength где?
Джо (2005-08-24 05:22:00) [16]
> [6] Defunct © (24.08.05 05:10)
Да, название неудачное. И вообще, установку флага я производил бы в методе LoadIt.
Defunct (2005-08-24 05:10:00) [17]> Джо
IsLoad это больше на название функции похоже, или свойства.
как для флага Loaded должно было быть.
AIms (2005-08-24 04:12:00) [18]Отбой тревоги. :) Перезагрузился и всё нормально заработало. Видимо просто глюк какой то был. Очень надеюсь, что повторяться он не будет.
Джо (2005-08-24 04:02:00) [19]
> [3] Defunct © (24.08.05 03:59)
Lazy load.
То бишь, загрузка актуальных данных только после первого обращения к свойству. Я так понимаю.
Defunct (2005-08-24 03:59:00) [20]Это что?
if not isLoad then begin
isLoad := True;
LoadIt;
end;
без этого тоже тормозит?