2010-03-18 2 views
4

Я просто задавался вопросом, что будет дешевле, используя блок catch catch для индекса за пределами границ или проверку длины многомерного массива и сравнение значений?Try-Catch или Check Length?

У меня такое ощущение, что это длина, так как я могу хранить длину в переменной, а затем просто делать, если они относительно дешевы. Я просто не знаю, как дорого стоит попытка.

Спасибо!

ответ

11

Проверка длины - это намного дешевле, чем исключение. Когда у вас есть блок try..catch, он добавляет в ваш код дополнительные структуры для исключения исключений - это нормально, я не говорю, что это неправильно, но если вы можете проверить длину границ, тогда сделайте это вместо этого.

+0

Согласовано, попробуйте/поймать очень дорого vs проверяя параметр длины на массиве. +1 –

+0

Спасибо всем! – Shaded

+0

To downvoter - не забывайте про комментировать, почему вы остановили его? –

2

Бросание исключения - дорогостоящая операция (так как вам нужно создать трассировку стека). Пойдите с проверкой длины.

+1

Это может зависеть от того, как часто возникает исключение. Если вы проверяете длину каждый раз, но только выходите за пределы 1 за каждые 100 000 раз, то это единственное исключение, еще более дорогое, чем 100 000 проверок границ? –

+0

@ Eric Petrolje: Целое сравнение - дешевая операция; Процессоры могут запускать его как одну операцию на одном из своих ALU (Арифметические логические единицы). – Powerlord

0

Я бы сказал «меру», если вам интересно, что более эффективно для вашей ситуации.

Например: Что делать, если условие вне пределов крайне редко? Таким образом, out-of-bound никогда не бросает ... В этом случае все лишние «ручные» проверки границ могут быть медленнее.

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

19

Бросание исключения чрезвычайно дорого по сравнению с проверкой значения целого числа. Однако это не имеет значения. Более важно то, что даже если бы исключения были дешевыми, они все равно были бы неправильным выбором. Исключением является то, что он представляет собой исключительное событие . Исключения в идеале должны использоваться только для того, чтобы представлять что-то неожиданное, редкое и предпочтительно фатальное.

Другой способ взглянуть на это: если вы обращаетесь к массиву за пределами его границ, у вас есть ошибка . Исправьте ошибку. Обработчик исключений скрывает ошибку, это не исправить ошибку.