Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2008, 19:25   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
Хорошо Оптимезация программ... Как лучше?

Привет всем!
У меня тут парочка вопросов по оптимезазии программ на delphi.

Какой вариант будит работать быстрее
1)
Код:
var
is_check: boolean;
procedure{ чекаем / анчекаем }tMain_form.check_boxClick(sender: tObject);
begin
   is_check := check_box.checked;
end;

procedure{ Кликаем по кнопке }tMain_form.test_buttonClick(sender: tObject);
begin
   if is_check then showMessage('YES') else showMessage('NO');
end;
2)
Код:
procedure{ Кликаем по кнопке}tMain_form.test_buttonClick(sender: tObject);
begin
   if check_box.checked then showMessage('YES') else showMessage('NO');
end;
Если у вас есть советы по оптимезации, пожалуйсто напишите...
Спасибо заранее!
Altera вне форума Ответить с цитированием
Старый 26.02.2008, 19:36   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Второй код более похож на русский. С первым что-то замутили, хотя тоже работать будет. А вообще во времени ни капли не потеряете, т.к. современные компы это всё за милисекунду обработают!
FaTaL вне форума Ответить с цитированием
Старый 26.02.2008, 19:43   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Ну я знаю, но когда комп перегружен...

Я слышал, что a+a - делается быстрее, что a*2... правдо?
Altera вне форума Ответить с цитированием
Старый 26.02.2008, 19:54   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Если чекбокс будет "чекнут" не щелканьем по нему, а любым другим способом, то переменная is_check утратит свой смысл. Как и весь первый вариант кода.
B_N вне форума Ответить с цитированием
Старый 26.02.2008, 20:32   #5
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Цитата:
Я слышал, что a+a - делается быстрее, что a*2... правдо?
с точки зрения оптимизации то x*n будет выполнятся дольше чем аналог x+x+x+x+...+Xn. И если взять циклы:
Код:
for i:=0 to 2 do
z[i]:=i+1;
медленее работает чем
Цитата:
z[0]:=1;
z[1]:=2;
z[2]:=3;
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 26.02.2008, 22:02   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Там нечего оптимизировать. Элементарная процедура. Если разобрать по полочкам, переменная is_check лишняя, но обращение к ней в проверке произойдет быстрее чем к свойству объекта check_box, к-рый унаследован от другого объекта и т.д. Хочешь узнать что быстрее, запусти в цикле миллион повторений.

А вообще сложение выполняется быстрее чем вычитание, в квадрат и в куб лучше возводить перемножением а не функцией, sin, cos быстрее не высчитывать а брать из массива.
Проверки нужно организовывать так, чтобы избежать лишних проверок, если первая к примеру сработала, другие чтобы не проверялись.
Продолжать можно долго, как-то читал в журнале (бумажном) статью хорошую про оптимизацию программ. Надо будет в сети поискать, если найду дам ссылку.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.02.2008, 06:23   #7
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Ну а вот как, например, пишут приложение, где много настроек?
Не в каждой же процедуре идёт сравнение типа:
Код:
if radioButton1.checked then
begin
....
....
....
....
end
else
begin
....
....
....
....
end;
Altera вне форума Ответить с цитированием
Старый 27.02.2008, 08:42   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Там делают цикл, в котором настройки проверяются, перед этим они формируются в массив.
Цитата:
Я слышал, что a+a - делается быстрее, что a*2... правдо?
Иногда для ускорения умножения на четное число используют более быструю операцию shl, типа такого: caption:=IntToStr(StrToIntDef(Edit1 .Text,0) shl 1);
А вообще оптимизация - это компромис между скоростью и написанием кода так чтоб его потом было удобнее понимать.
Кое где стоит поступиться скоростью зато код будет более понятным.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2008, 09:29   #9
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

С. Макконнелл. "Совершенный код". Рекомендую.

Еще можно "Веревка достаточной длины, чтобы выстрелить себе в ногу".
alexBlack вне форума Ответить с цитированием
Старый 27.02.2008, 19:38   #10
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Иногда для ускорения умножения на четное число используют более быструю операцию shl
Turbo Pascal уходит в прошлое. Delphi всё нормально оптимизирует, поэтому можно писать * и div - получатся shl и shr. Используются они не для чётных чисел, а для двойки в степени. Умножение в скомпилированном коде (смотрел в Delphi 6) может производиться с помощью одной или двух инструкций add, shl, lea, а если это невозможно - то только в этом случае mul, imul.
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чём лучше программировать на WIN API? Makcydrl Win Api 16 09.05.2008 17:01
Вмк&физфак- что лучше? bill Свободное общение 0 07.03.2008 14:46
Что лучше учить? Kosoy135 Свободное общение 8 30.09.2007 01:50
Загрузка программ из др. программ в АСМе Shacal Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 05.02.2007 08:53
что же лучше??? Freedom БД в Delphi 21 06.12.2006 21:22