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

Вниз

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

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

Наверх




Память: 0.5 MB
Время: 0.064 c
2-1269966073
Dr. Genius
2010-03-30 20:21
2010.08.27
Формат даты вида "30 марта 2010 года"


2-1271142511
Ostrik
2010-04-13 11:08
2010.08.27
Delphi bd


15-1265566198
palva
2010-02-07 21:09
2010.08.27
Весна скоро... Фото с натуры.


11-1221313480
DJ Vusal
2008-09-13 17:44
2010.08.27
Проблема OLE обращений из Delphi в Excel


15-1268326974
Правильный$Вася
2010-03-11 20:02
2010.08.27
D2010 обрела уже стабильность?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский