правильно, потому что 1=1 сравниваются константы компилятор такие вещи вычисляет заранее кстати, AlexTheC0d3r советую для таких вещей установить себе профайлер чтобы каждый раз не мучаться с настройкой велика - GProfile Намного хуже когда я вижу такой код: if Button1.Enabled = True then ...
Да, это тоже лол Эт я тоже давно читал примеры говнокода и вот до сих пор вспоминаю код : if Length(IntToStr(number)) = 1 then {один разряд у числа} else { не один } или if true then {что то делаем} else {а дальше сплошной профит} Такие мастера находятся)
Потестил код, короче с true как ни крути выигрывает, 672ms, при 1=1 686ms. Но в отладчике код одинаков, то есть ни там ни там нет проверки, но разница есть, во всём виноваты массоны)
Новый тест, без оптимизации... Действительно, как бы не парадоксально это выглядело, но PHP: while true do проигрывает по скорости коду -> PHP: while 1=1 do Также можно заметить, что добавление в условие цикла сторонних вычислений во много раз замедляет его работу, вот доказательства: 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
Один раз было, что True на 10 мс быстрее выполнилось чем 1=1: 1: 3859ms 2: 3844ms 3: 91609ms 1: 4249ms 2: 4000ms 3: 92421ms P.s. 3 метод просто убивает
Хватит гадать, в обоих случаях константные выражения. Точная скорость выполнения зависит от слишком многих факторов
объясните пожалуйста почему когда использую этот код и подключаю icqclient, то код рожает совсем другие символы?
всё, разобрался. но возникла другая проблема. по коду Jingo Bo, если брать словарь 79 символов и переменную int64, то перебор возможен до ~7(длина пароля) символов, потом всё по новой переберает. =\