- Сообщения
- 8,670
- Репутация
- 2,479
Данная тема затрагивалась так или иначе на форуме, но я решил отвести её в отдельное обсуждение.
AZJIO пришёл к следующим результатам:
При логическом False в условии, комбинация в одну строку работает быстрее, поэтому цикл содержащий вероятное условие False и однократный True для выхода из цикла - лучше делать одной строкой.
Вот скрипт показывающий данное утверждение:
Объясняется это тем, что при условий False, выполняется меньше кода (без $b = False), а в случае с завершающим EndIf, всегда будет исполняться больше кода (из за проверки EndIf).
AZJIO пришёл к следующим результатам:
При логическом False в условии, комбинация в одну строку работает быстрее, поэтому цикл содержащий вероятное условие False и однократный True для выхода из цикла - лучше делать одной строкой.
Вот скрипт показывающий данное утверждение:
Код:
_SpeedTest("_Test_IfThen_OnTrue")
_SpeedTest("_Test_IfThenEndIf_OnTrue")
_SpeedTest("_Test_IfThen_OnFalse")
_SpeedTest("_Test_IfThenEndIf_OnFalse")
Func _Test_IfThen_OnTrue()
For $i = 1 To 1000000
If 1 Then $b = False
Next
EndFunc
Func _Test_IfThenEndIf_OnTrue()
For $i = 1 To 1000000
If 1 Then
$b = False
EndIf
Next
EndFunc
Func _Test_IfThen_OnFalse()
For $i = 0 To 1000000
If 0 Then $b = False
Next
EndFunc
Func _Test_IfThenEndIf_OnFalse()
For $i = 1 To 1000000
If 0 Then
$b = False
EndIf
Next
EndFunc
Func _SpeedTest($sTestFunc)
Local $iRepeat_Test = 5
Local $aTests[$iRepeat_Test+1] = [$iRepeat_Test]
Local $iTotal_Tests = 0
For $x = 1 To $iRepeat_Test
$iTimer = TimerInit()
;=== CODE TEST ====
Call($sTestFunc)
;=== CODE TEST ===
$aTests[$x] = Round(TimerDiff($iTimer), 3)
$iTotal_Tests += $aTests[$x]
ConsoleWrite("Test #" & $x & ": " & $aTests[$x] & " ms" & @LF)
Next
$iAverage = Round($iTotal_Tests / $iRepeat_Test, 3)
ConsoleWrite("======================" & @LF & "Tests Average For [" & $sTestFunc & "]: " & $iAverage & @LF & "======================" & @LF & @LF)
EndFunc
Объясняется это тем, что при условий False, выполняется меньше кода (без $b = False), а в случае с завершающим EndIf, всегда будет исполняться больше кода (из за проверки EndIf).