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

Вниз

Какой вызов процедуры быстрее?   Найти похожие ветки 

 
Barloggg   (2005-09-20 11:33) [0]

Какой вызов процедуры быстрее?
Есть вот такой класс
type TC=Class
  procedure p;
end;
есть куча объектов такого класса которые могут быть, а могут и не быть (игра-стратегушка)
и надо часто вызывать его процедуру.
вот таким образом
var a:tc;
....
if a<>nil then tc.p;
...
Не лучше ли сделать так?
type Tp=procedure;
procedure p0;begin end;это процедура-пустышка
var a:tc;
var p:Tp;
.....
вначале один раз объявим
p:=p0;
....
а при создании объекта сделаем так
a:=tc.create;p:=tc.p;

и потом будем часто вызывать процедуру вот таким образом
p;
без каких-либо проверок. если объект есть, вызовется его процедура, а если нету, то вызовется пустышка.

стоит ли?
Что быстрее: лишняя проверка на nil или запуск пустышки?


 
Digitman ©   (2005-09-20 11:39) [1]


> при создании объекта сделаем так
> a:=tc.create;p:=tc.p;


нет, не "сделаем".

компилятор за это тут же по мозгам даст.


 
Barloggg   (2005-09-20 12:12) [2]

Согласен, тогда класс меняем, делаем так:

type Tp=procedure;
type Tc=class
  p:Tp;
end;
var
 a:Tc;
 p:Tp;
Procedure p0;
Procedure p1;
implementation
Procedure p0;begin
showmessage("NotOK");
end;
procedure p1;begin
showMessage("OK");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
p:=p0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
p;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
a:=tc.Create;
a.p:=p1;
p:=a.p;
end;

Вот. Пока объект не создан, вызывается пустышка, а если создан, то вызывается ссылка из объекта.
Но смысл остался тем же.
Только в процедуру придется еще толкать ссылку на сам объект, но пустышке наплевать, что туда придет nil...

Итак, такая организция это крутизна или кривизна?


 
kblc ©   (2005-09-20 12:17) [3]

Я вообще не понимаю смысла данной конструкции...
Проверка на nil ( OR ) помоему быстрее чем вызов "пустышки" JMP - RET


 
Плохиш ©   (2005-09-20 12:28) [4]


> Barloggg   (20.09.05 12:12) [2]

А если создано больше одного объекта?


 
Barloggg   (2005-09-20 12:34) [5]

Если больше одного объекта, тогда добавится Sender и вызов будет таким:
P(a);
Ну и соответственно описание типа процедуры изменится.
хмм...
я вот не уверен, что лишняя проверка быстрее будет... эти классы имеют под собой множество невидимых проверок... побочный эффект принципа наследования...


 
Джо ©   (2005-09-20 12:37) [6]

А какой смысл объекта, если в этом единственном (?) методе нет обращения к его полям? А если есть обращение к полям, то если "объект не создан", то такое вообще невыполнимо.
Или я чего-то не понимаю?


 
Digitman ©   (2005-09-20 12:38) [7]


> Barloggg


не понятно, зачем тут регулярные процедуры, когда сплошь и рядом - классы/объекты и их методы ...


 
kblc ©   (2005-09-20 12:45) [8]

Проверяешь ты на nil не сам класс а ссылку. так что только один OR чем как ты говоришь ещё и унаследования предков...


 
Джо ©   (2005-09-20 12:54) [9]


>  [8] kblc ©   (20.09.05 12:45)

Где там OR?


 
kblc ©   (2005-09-20 12:57) [10]

> Джо ©   (20.09.05 12:54) [9]

я про тот самый OR в Ас-ме


 
Джо ©   (2005-09-20 12:59) [11]


>  [10] kblc ©   (20.09.05 12:57)
> > Джо ©   (20.09.05 12:54) [9]
> я про тот самый OR в Ас-ме

И где он там? Там будет test, в крайнем случае cmp.


 
kblc ©   (2005-09-20 13:03) [12]

Джо ©   (20.09.05 12:59) [11]
/me матерится..
Прошу прощения - я не прав..


 
evvcom ©   (2005-09-20 13:40) [13]


> Barloggg

А чем тебя проверка не устраивает? Тормозит сильно? Ну выгадаешь ты десяток машинных тактов и что дальше? Сокращение на десяток тактов из тысячи ты даже не заметишь. Так есть ли смысл так извращаться?



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

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

Наверх




Память: 0.49 MB
Время: 0.236 c
14-1126857838
ocean
2005-09-16 12:03
2005.10.09
Упрямство


2-1125379587
_M_I_X_
2005-08-30 09:26
2005.10.09
Посмотрите од в чем ошибка


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


2-1125301044
kyn66
2005-08-29 11:37
2005.10.09
Как изменит фон в ячейке StringGrid ?


14-1126670926
X9
2005-09-14 08:08
2005.10.09
Антивирус Касперского - MustDie?