Форум: "Начинающим";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
ВнизПочему возникают тормоза при переходе от массива к такой схеме ? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.013 c