Условный порядок выписки по частоте или времени вычисления?

Допустим, у меня есть 100 различных условий в выражении IF-ELSE.

if((boolean = methodA)){
    ...
}
else((boolean = methodZ)){
    ...
}

Логически, я думаю, что наименее возможное условие должно идти к последнему условию (то, которое имеет метод Z), а наиболее частое условие должно переходить к первому условию (метод А).

Тогда я подумал: "А что, если methodA отнимает много времени?". methodZ занял бы больше времени, чем достигнуть, даже если это наименее часто. Должен ли я упорядочить условия по времени вычислений? Или заказать их по частоте?

Что было бы хорошим подходом к решению этой дилеммы?

2 ответа

Решение

Допустим, у меня есть 100 различных условий в выражении IF-ELSE

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

Должен ли я упорядочить условия по времени вычислений? Или заказать их по частоте?

Там нет точного ответа на это. Первое, что нужно сделать, это просто написать условия, затем использовать профилировщик в своем приложении и оценить, действительно ли некоторые из условий являются проблемой в вашем коде. Если вы обнаружите, что один из них сильно загружен ЦП, начните специальный анализ, чтобы улучшить его.

Вам нужно подвести баланс. Время, которое нужно рассчитать, относится не только к методам, но и ко всей транзакции. Если метод Z завершается за 1/100 времени метода A, а частота метода Z меньше 100-й от метода A, то его следует переместить на вершину.

Другие вопросы по тегам