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

Вниз

Какой код лучше?   Найти похожие ветки 

 
pro_xaoc ©   (2010-05-21 10:29) [0]

Всем привет! Вот например, есть два способа написания процедуры или части кода, а теперь, как можно узнать какой из этих кодов быстрее, лучше?


 
@!!ex ©   (2010-05-21 10:33) [1]

Протестировать.


 
Sergey13 ©   (2010-05-21 10:44) [2]

> [0] pro_xaoc ©   (21.05.10 10:29)
> лучше

Легко. Определяешь объективные критерии лучшести и сравниваешь по этим критериям.


 
pro_xaoc ©   (2010-05-21 10:47) [3]


> Протестировать.

А как тестировать?


 
Jeer ©   (2010-05-21 10:57) [4]


> А как тестировать?
>


засечь время перед, потом после выполнения и сравнить.
Это если критерий - время.


 
pro_xaoc ©   (2010-05-21 11:02) [5]


> засечь время перед, потом после выполнения и сравнить.Это
> если критерий - время.

как засечь? чем засечь? можно поподробнее?


 
RWolf ©   (2010-05-21 11:12) [6]

start:=GetTickCount();
ExecuteMyCode();
duration:=GetTickCount()-start;
ShowMessage("Код выполнялся "+inttostr(duration)+" миллисекунд");


 
han_malign   (2010-05-21 11:18) [7]


> ExecuteMyCode();

- правильнее for i:= 1 to 1000000 do ExecuteMyCode();


 
{RASkov} ©   (2010-05-21 11:26) [8]

> [7] han_malign   (21.05.10 11:18)
> - правильнее

что значит правильнее?
зависит от условий задачи.
Может ExecuteMyCode выполнятся каждый раз разное кол-во времени.... а нужно узнать не среднее(общее), а конкретный вызов....


 
Ega23 ©   (2010-05-21 11:50) [9]


> Может ExecuteMyCode выполнятся каждый раз разное кол-во
> времени.... а нужно узнать не среднее(общее), а конкретный
> вызов....


Тогда этот замер не имеет смысла.


 
han_malign   (2010-05-21 13:04) [10]


> ExecuteMyCode();
> duration:=GetTickCount()-start;
> ShowMessage("Код выполнялся "+inttostr(duration)+" миллисекунд");

- в нормальном варианте(когда функция достаточно короткая) от 0 да 100(1-5 квантов), зависит не от функции, а от того - сколько раз поток был вытеснен системой...
Может помочь функция GetThreadTimes, которая в lpUserTime возвращает время в течении которого процессор был занят конкретно этим потоком(причем не считая времени на переключение потоков, и время "занятое" у потока ядром(lpKernelTime) на всякие DPC), но различное состояние кэшэй процессора и подсистемы памяти(пресловутый Page Fault при подгрузке) может давать относительную погрешность измерения больше 100%. Поэтому, для улучшения оценки необходимо увеличивать выборку. Причем - все выделения/освобождения памяти желательно по возможности выносить за пределы тестируемого кода, т.к. они по времени могут занимать на порядок больше времени чем сам алгоритм...(пламенный привет - мусорной куче .NET)


 
Омлет ©   (2010-05-21 13:22) [11]

Пример замера времени работы разных процедур:
http://delphimaster.net/view/2-1273081388/


 
Плохиш ©   (2010-05-21 16:28) [12]


> Какой код лучше?

Тот, который всегда продуцирует требуемый результат.


 
Amoeba_   (2010-05-21 18:07) [13]


> есть два способа написания процедуры или части кода
>

И где они, эти два мифических способа?  Хоть бы показал честому народу свои достижение на ниве программирования. Скорей всего, что оба хреновые.


 
0x00FF00   (2010-05-22 02:16) [14]

> Скорей всего, что оба хреновые.

Злобно =)


 
_Юрий ©   (2010-05-22 10:04) [15]


>  Скорей всего, что оба хреновые.
>
>

Даже их двух хреновых кодов один все равно хреновее другого. Крайне трудно написать два кода абсолютно одинаковой хреновости:-)

По сабжу: скорость выполнения далеко не всегда является главным критерием качества кода. А точнее, очень редко, только очень в тяжелых и длительных процедурах.


 
Sha ©   (2010-05-22 10:16) [16]

С другой стороны, такой код тоже "не всегда является главным критерием качества" :)

var
 s: string;
begin
  ...
  while pos(" ",s)>0 do
  begin
    delete(s, pos(" ",s), 1);
  end;
  ...
end;


 
Sha ©   (2010-05-22 10:25) [17]

Я уж не говорю про таких

   s:=Copy(s, 1, Pos(" ", s) - 1) + Copy(s, Pos(" ", s) + 1, Length(s) - Pos(" ", s));


 
_Юрий ©   (2010-05-22 10:26) [18]


> Sha ©   (22.05.10 10:16) [16]


Такой код является критерием качества программиста:-)

Собственно, какие еще критерии качества кода  могут быть, кроме скорости?
Видимо, безошибочность и расширяемость. В данном случае тут проблем ни по тому ни по другому нет.

Но если там строка из 50 символов, и всего один проход, то в общем то не особо важно, сколько пользователь ждал ответа на нажатие кнопки - сотую долю секунды или десятую


 
Sha ©   (2010-05-22 10:35) [19]

Проблема в том, что "один при отладке"
может  превратиться в "N^3 при эксплуатации".


 
_Юрий ©   (2010-05-22 10:52) [20]


> Sha ©   (22.05.10 10:35) [19]


чтобы не превратилось, просто не нужно никогда так писать в библиотечных модулях (общего назначения). А в методе форм1баттон1клик - ничего страшного.
Кстати, есть еще такой критерий, как скорость программирования, тоже важный :-)


 
Sha ©   (2010-05-22 11:01) [21]

> _Юрий ©   (22.05.10 10:52) [20]

Есть программисты и программисты.



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

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

Наверх




Память: 0.51 MB
Время: 0.048 c
4-1237551600
mreg
2009-03-20 15:20
2010.08.27
Как отловить вызов WinApi функции?


15-1272486602
Юрий
2010-04-29 00:30
2010.08.27
С днем рождения ! 29 апреля 2010 четверг


15-1275731524
REX
2010-06-05 13:52
2010.08.27
Комментарии в SQL (Access)


2-1269701259
Semnich
2010-03-27 17:47
2010.08.27
Помогите с задачкой


15-1274432547
boriskb
2010-05-21 13:02
2010.08.27
Можно не всё сразу а выборочно?