2009-11-11 3 views
5

У меня есть три условия для сравнения. Какой из них быстрее между двумя? Пожалуйста, укажи мне. Спасибо всем!Что происходит быстрее - если ... или выберите ...?

If var = 1 then 
    Command for updating database 
ElseIf var = 2 then 
    Command for updating database 
ElseIf var = 3 then 
    Command for updating database 
EndIf 

и

Select Case var 
    Case 1 
     Command for updating database 
    Case 2 
     Command for updating database 
    Case 3 
     Command for updating database 
End Select 
+8

Любая производительность, которую вы получите, будет в лучшем случае минимальной с одним подходом к другому. Возможность чтения кодовых козырей для таких вещей каждый раз. – JohnFx

ответ

12

Если вы скомпилируете два фрагмента и используете рефлектор для демонтажа, вы увидите, что они оба оказались практически такими же ИЛ. Компилятор заменяет if/else оператором case.

Этот вид микро-оптимизации вряд ли поможет вам, если у вас проблемы с производительностью.

Если у вас проблемы с производительностью, вам необходимо профайл программы и узнать, где узкие места.

Если у вас нет проблем с производительностью, прекратите потение этого материала и беспокоитесь о написании кода, который легко понять.

8

операция базы данных будет по меньшей мере в 1000 раз медленнее, чем утверждение if/else или case.

В общем случае операторы case могут выполняться быстрее, поскольку компилятор или среда выполнения могут создавать таблицу перехода. Обычно, для менее чем пяти элементов, компилятор будет писать оператор case как список операторов if/else. Если бы производительность вышеизложенного была измеримой, я бы предположил, что производительность будет одинаковой, так как, вероятно, выполняются одни и те же инструкции.

MSIL имеет конкретные заявления OpCode for switch. Нужно декомпилировать MSIL, чтобы увидеть, будет ли VB.Net создавать таблицу перехода для трех элементов.

10

Теоретически, switch..caseдолжен быть быстрее, потому что это таблица поиска (как это чаще всего реализуется компилятором).

Однако, если вы беспокоитесь о том, какой из этих работает быстрее, и это действительно узкое место в вашей программе, у вас есть феноменально-хорошо продуманный проект.

4

Лучший способ ответить на этот тип вопросов окончательно - с эталоном.

Поместите каждую операцию в цикл, который выполняет 10 000 раз, запишите системное время до и после цикла, вычтите время начала с конца и сравните результаты каждого метода.

Смежные вопросы