Операторы сравнения If...Then и Select...Case (в дополнение к #14)
=================================================
Во всех случаях, независимо от типа переменной, В = 5
Во всех случаях использован "пустой" Gosub...Return
Для B As Byte
If B = 5 Then Gosub ... 5 тактов
If B <> 6 Then Gosub ... 5 тактов
If B > 5 Then Gosub ... 7 тактов
If B < 5 Then Gosub ... 7 тактов
If B = 5 Then Gosub ...
If B <> 6 Then Gosub ... 11 тактов
If B = 5 Then Gosub ...
If B < 5 Then Gosub ... 11 тактов
If B = 5 Then Gosub ...
If B > 5 Then Gosub ... 13 тактов
If B = 5 Then Gosub ...
If B <> 6 Then Gosub ...
If B < 5 Then Gosub ... 17 тактов
If B = 5 Then Gosub ...
If B <> 6 Then Gosub ...
If B > 5 Then Gosub ... 19 тактов
Каждое последующая строка сравнения дает приращение в 6 или 7 тактов, в зависимости от вида сравнения:
If B = 5 Then Gosub ...
If B <> 6 Then Gosub ...
If B < 5 Then Gosub ...
If B < 4 Then Gosub ... +6 тактов
If B = 5 Then Gosub ...
If B <> 6 Then Gosub ...
If B < 5 Then Gosub ...
If B > 6 Then Gosub ... +7 тактов
... и для разнообразия:
Для B As Integer
If B = 5 Then Gosub ... 11 тактов
Для B As Long
If B = 5 Then Gosub ... 27 тактов
Для B As Single
If B = 5 Then Gosub ... 115 тактов
Для B As Double
If B = 5 Then Gosub ... 115 тактов
Варианты с несколькими строками сравнения не приведены, но время выполнения увеличивается в примерно таком же соотношении.
=================================================
Для B As Byte
Select Case B
Case 5 : Gosub ... результат - True
End Select 5 тактов
Select Case B
Case 4 : Gosub ... результат - False
End Select 2 такта
Каждый последующий результат True дает приращение в 5 тактов, а False - в 2 такта, например:
Select Case B
Case 5 : Gosub ... результат - True 5 тактов
Case 4 : Gosub ... результат - False 2 такта
Case 3 : Gosub ... результат - False 2 такта
End Select
Для B As Integer
Select Case B
Case 5 : Gosub ...
End Select 11 тактов
Для B As Long
Select Case B
Case 5 : Gosub ...
End Select 27 тактов
Для B As Single
Select Case B
Case 5 : Gosub ...
End Select 115 тактов
Для B As Double
Select Case B
Case 5 : Gosub ...
End Select 115 тактов
Тут картина примерно такая же, как и с If...Then ...
=================================================
Вывод: цепочка из нескольких Select...Case обрабатывается несколько быстрее, чем If...Then.
=================================================
PS. На очереди подобное исследование с переменными типа String
Отредактировано Nord (2021-09-13 20:19:30)