Форум: "Начинающим";
Текущий архив: 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