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

Вниз

оптимизация   Найти похожие ветки 

 
Scott Storch   (2011-05-11 11:48) [0]

Стоит ли выноить aFirstLink + aLinkCount - 1 в отдельную переменную, чтобы каждый раз не высчитывалось?


for I := aFirstLink to aFirstLink + aLinkCount - 1 do
begin

<...>

end;



 
KSergey ©   (2011-05-11 11:57) [1]

В дельфи границы цикла For вычисляются только 1 раз, потом используются ранее вычисленные готовые значение.
В этом есть прикольный подвох.
Но это документировано


 
Scott Storch   (2011-05-11 12:13) [2]

Спасибо.

еще для уточнения, если я в этом цикле отрисовываю текст, параметр Y функции TextOut на каждой итерации у меня высчитывается, параметр X - всегда постоянный, имеет ли смысл вынести его перед циклом.

Canvas.TextOut(Rect.Left + list_images.Width + LEFT_RIGHT_INDENT * 2, Y, S);


 
clickmaker ©   (2011-05-11 12:14) [3]

> параметр X - всегда постоянный, имеет ли смысл вынести его
> перед циклом

имеет, конечно


 
Jeer ©   (2011-05-11 12:16) [4]


> имеет ли смысл вынести его перед циклом.


Это очевидно.


 
KSergey ©   (2011-05-11 12:27) [5]

> Scott Storch   (11.05.11 12:13) [2]
>  параметр X - всегда постоянный, имеет ли смысл вынести его перед циклом.

Оптимизация от этого будет копеечная в сравнении с прочим.
Но! гораздо важнее этого то, что код с отдельно вынесенной переменной будет гораздо более читабелен и проще в сопровождении.


 
Ega23 ©   (2011-05-11 12:53) [6]


> имеет ли смысл вынести его перед циклом.
>
Canvas.TextOut(Rect.Left + list_images.Width + LEFT_RIGHT_INDENT
* 2, Y, S);



Более того, имеет смысл заранее вычислить Rect.Left + list_images.Width


> Оптимизация от этого будет копеечная в сравнении с прочим.


Смотря сколько раз этот код вызывается.


 
RWolf ©   (2011-05-11 13:20) [7]


> Смотря сколько раз этот код вызывается.

в любом случае, по сравнению c вызовом Canvas.TextOut — копейки.


 
clickmaker ©   (2011-05-11 13:24) [8]

> по сравнению c вызовом Canvas.TextOut — копейки

по копеечке рубль набежит


 
RWolf ©   (2011-05-11 13:28) [9]


> clickmaker ©   (11.05.11 13:24) [8]

ну вот сколько времени займёт вытащить два поля из кэша и сложить их — по сравнению с отрисовкой текста на канвасе? сомневаюсь, что эффект от  оптимизации этого сложения можно вообще достоверно обнаружить.


 
clickmaker ©   (2011-05-11 13:32) [10]

> сомневаюсь, что эффект от  оптимизации этого сложения можно
> вообще достоверно обнаружить

если можно избавиться от лишних телодвижений - нужно избавляться


 
Ega23 ©   (2011-05-11 13:39) [11]


> ну вот сколько времени займёт вытащить два поля из кэша
> и сложить их — по сравнению с отрисовкой текста на канвасе?
>  сомневаюсь, что эффект от  оптимизации этого сложения можно
> вообще достоверно обнаружить.


С одной стороны - да, ты прав. Конкретно для этого случая - пренебрежительно мало.
С другой стороны - дело в общем подходе. Представь, что вместо Rect.Left + list_images.Width у тебя какой-нибудь ObjectA.SomeIntProperty + ObjectB.SomeIntProperty  на которые каскадные геттеры наложены без inline-директивы. И тут уже фиг его знает, где больше времени потеряется, на TextOut или вычислении свойств.
Если есть возможность что-то вычислить заранее и вынести за цикл - лучше вычислить и вынести. Хуже - точно не будет.


 
Anatoly Podgoretsky ©   (2011-05-11 13:49) [12]

> clickmaker  (11.05.2011 13:24:08)  [8]

Ну подумаешь на час будет быстрее, чем при семидневной работе.


 
Anatoly Podgoretsky ©   (2011-05-11 13:50) [13]

> clickmaker  (11.05.2011 13:32:10)  [10]

Это без сомнений и со временем сумеет инварианты вычислять и выполнять их
вне цикла.


 
Anatoly Podgoretsky ©   (2011-05-11 13:52) [14]

> Ega23  (11.05.2011 13:39:11)  [11]

Представить можно, но поскольку это не константы, а свойства да еще и
каскадным геттером, то может их надо постоянно вычислять?


 
Ega23 ©   (2011-05-11 14:16) [15]


> то может их надо постоянно вычислять


Ключевое слово - "может", согласись? :)


 
KSergey ©   (2011-05-11 14:28) [16]

> Ega23 ©   (11.05.11 12:53) [6]
> > Оптимизация от этого будет копеечная в сравнении с прочим.
> Смотря сколько раз этот код вызывается.

Не забываем, что Canvas.TextOut() вызовется ровно такое же количество раз.
Так что здесь - копеечная.


 
KSergey ©   (2011-05-11 14:32) [17]

> KSergey ©   (11.05.11 14:28) [16]

Чета я опоздал :)



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

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

Наверх




Память: 0.51 MB
Время: 0.009 c
4-1249917325
A.Melnyk
2009-08-10 19:15
2011.08.28
Как измененить иконки файлов?


3-1262248374
12
2009-12-31 11:32
2011.08.28
можно как-то сделать быстрее?


2-1305328162
TheEd
2011-05-14 03:09
2011.08.28
в разных DBF-файлах строки разного формата - как прочитать?


15-1304627395
Юрий
2011-05-06 00:29
2011.08.28
С днем рождения ! 6 мая 2011 пятница


3-1263219115
dolmat
2010-01-11 17:11
2011.08.28
order by изменить порядок сортировки