ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

06.04.2010, 01:05
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
правильно, потому что 1=1 сравниваются константы
компилятор такие вещи вычисляет заранее
кстати, AlexTheC0d3r советую для таких вещей установить себе профайлер чтобы каждый раз не мучаться с настройкой велика - GProfile
Намного хуже когда я вижу такой код:
if Button1.Enabled = True then ...
Последний раз редактировалось GhostOnline; 06.04.2010 в 01:16..
|
|
|

06.04.2010, 02:06
|
|
Познающий
Регистрация: 25.10.2009
Сообщений: 97
Провел на форуме: 604635
Репутация:
15
|
|
if Button1.Enabled = True then ...
Да, это тоже лол
Эт я тоже давно читал примеры говнокода и вот до сих пор вспоминаю код :
if Length(IntToStr(number)) = 1 then
{один разряд у числа} else { не один }
или
if true then
{что то делаем} else {а дальше сплошной профит}
Такие мастера находятся  )
Последний раз редактировалось Jingo Bo; 06.04.2010 в 02:14..
|
|
|

06.04.2010, 02:13
|
|
Познающий
Регистрация: 25.10.2009
Сообщений: 97
Провел на форуме: 604635
Репутация:
15
|
|
Потестил код, короче с true как ни крути выигрывает, 672ms, при 1=1 686ms. Но в отладчике код одинаков, то есть ни там ни там нет проверки, но разница есть, во всём виноваты массоны  )
|
|
|

06.04.2010, 15:04
|
|
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме: 1229135
Репутация:
425
|
|
Новый тест, без оптимизации...
Действительно, как бы не парадоксально это выглядело, но проигрывает по скорости коду -> Также можно заметить, что добавление в условие цикла сторонних вычислений во много раз замедляет его работу, вот доказательства:
PHP код:
{$OPTIMIZATION OFF}
program TestCycleDuration;
{$APPTYPE CONSOLE}
uses
SysUtils, DateUtils;
var
i: integer;
timeStart, timeEnd: TDateTime;
firstRes, secondRes, thirdRes: string;
begin
Writeln('................................');
Writeln('................................');
Writeln('................................');
Writeln('................................');
Writeln('First test, cycle "while true do"');
Writeln('Testing...');
i := 0;
timeStart := now;
while True do
begin
i := i + 1;
if i = 2000000000 then
Break;
end;
timeEnd := Now;
Writeln('Test duration: ' + inttostr(MilliSecondsBetween(timeEnd, timeStart))
+
'ms');
firstRes := inttostr(MilliSecondsBetween(timeEnd, timeStart));
Writeln('................................');
Writeln('................................');
Writeln('................................');
Writeln('................................');
Writeln('Second test, cycle "while 1=1 do"');
Writeln('Testing...');
i := 0;
timeStart := now;
while 1 = 1 do
begin
i := i + 1;
if i = 2000000000 then
Break;
end;
timeEnd := Now;
Writeln('Test duration: ' + inttostr(MilliSecondsBetween(timeEnd, timeStart))
+
'ms');
secondRes := inttostr(MilliSecondsBetween(timeEnd, timeStart));
Writeln('................................');
Writeln('................................');
Writeln('................................');
Writeln('................................');
Writeln('Tird test, moron'#39's cycle "while StrToInt(1)=StrToInt(1) do"');
Writeln('Testing...');
i := 0;
timeStart := now;
while StrToInt('1') = StrToInt('1') do
begin
i := i + 1;
if i = 2000000000 then
Break;
end;
timeEnd := Now;
Writeln('Test duration: ' + inttostr(MilliSecondsBetween(timeEnd, timeStart))
+
'ms');
thirdRes := inttostr(MilliSecondsBetween(timeEnd, timeStart));
WriteLn('Two tests: 1: ' + firstRes + 'ms' + ' 2: ' + secondRes + 'ms' + ' 3:'
+ thirdRes + 'ms');
Readln;
end.
Результаты: 1- 4812ms 2-4750ms 3-36265ms
|
|
|

06.04.2010, 19:30
|
|
Участник форума
Регистрация: 30.03.2007
Сообщений: 121
Провел на форуме: 188563
Репутация:
52
|
|
Один раз было, что True на 10 мс быстрее выполнилось чем 1=1:
1: 3859ms 2: 3844ms 3: 91609ms
1: 4249ms 2: 4000ms 3: 92421ms
P.s. 3 метод просто убивает 
|
|
|

06.04.2010, 19:51
|
|
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме: 1229135
Репутация:
425
|
|
Сообщение от JnK
Один раз было, что True на 10 мс быстрее выполнилось чем 1=1:
1: 3859ms 2: 3844ms 3: 91609ms
1: 4249ms 2: 4000ms 3: 92421ms
P.s. 3 метод просто убивает 
Дак там и написано идиотский тест)
|
|
|

07.04.2010, 11:40
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
Хватит гадать, в обоих случаях константные выражения.
Точная скорость выполнения зависит от слишком многих факторов
|
|
|

07.04.2010, 15:24
|
|
Новичок
Регистрация: 05.04.2010
Сообщений: 7
Провел на форуме: 17240
Репутация:
0
|
|
const ci_interval = 79;
ci_index = 32;
function IntToSymbols(Const bound : Cardinal) : String;
Var i, curBound, c_mod : Cardinal;
c_tmp : Char;
Begin
Result := '';
curBound := bound;
while true do
Begin
if curBound < ci_interval then
Begin
Result := Result + Chr(ci_index + curBound);
Break;
end;
c_mod := curBound mod ci_interval;
curBound := curBound div ci_interval;
Result := Result + Chr(ci_index + c_mod);
end;
for i := 1 to Length(Result) div 2 do
Begin
c_tmp := Result[i];
Result[i] := Result[Length(Result)-i+1];
Result[Length(Result)-i+1] := c_tmp;
end;
end;
объясните пожалуйста почему когда использую этот код и подключаю icqclient, то код рожает совсем другие символы?
|
|
|

08.04.2010, 01:21
|
|
Новичок
Регистрация: 05.04.2010
Сообщений: 7
Провел на форуме: 17240
Репутация:
0
|
|
всё, разобрался. но возникла другая проблема. по коду Jingo Bo, если брать словарь 79 символов и переменную int64, то перебор возможен до ~7(длина пароля) символов, потом всё по новой переберает. =\
Последний раз редактировалось qwerty001; 08.04.2010 в 01:23..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|