2

Является ли компилятор VB.NET 2008 выборочной оптимизацией Select Case Statement?VB.NET Оптимизация компилятора Case Case?

Например, оператор Select Case с достаточным количеством целых случаев может быть организован как двоичный поиск.

Я спрашиваю об этом, потому что мне любопытно, следует ли мне выбрать вариант «Выбрать случай» вместо «Если заявления с несколькими Else If, ​​где сравниваются целые числа или другие базовые типы данных.

ответ

1

Select Case с 40 вариантами более чем в 10 раз быстрее, чем строка из 40 ElseIf заявлений. Это больше, чем вы ожидали бы получить при двоичном поиске. Я бы предположил, что простое целое число Select Case использует любой современный машинный код, эквивалентный вычисленному оператору goto, - он компилируется так, что он напрямую относится к соответствующему «случаю» на основе значения целого числа.

Я думаю, что Select Case - это тот, который нужно использовать.

2

В целом, вы должны беспокоиться о удобочитаемости кода и его ремонтопригодности сверх этой оптимизации производительности.

Если этот переключатель не находится внутри цикла, который выполняется 1000 (миллионы?) Раз, это маловероятно, что вы используете производительность вашего приложения.

Примите решение и придерживайтесь его для согласованности. В общем, не настройте код настройки, пока не проанализируете, где ваши узкие места в производительности.

См. Также this question.