Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.08.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.017 c
1-1264400079
Spot
2010-01-25 09:14
2011.08.28
Двойной клик по RXsplitter


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


15-1304595679
И. Павел
2011-05-05 15:41
2011.08.28
чтение системных журналов сообщений


15-1304354356
@!!ex
2011-05-02 20:39
2011.08.28
Как влияет Range check на работу результирующего кода?


15-1305100097
Scott Storch
2011-05-11 11:48
2011.08.28
оптимизация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский