2010-11-12 3 views
4

Почему использование try catch плохо для производительности приложения?
Я не говорю об использовании try catch 100 раз. Фактически, когда я использую его в тысячи раз.
Действительно ли это вызывает проблемы для производительности?

СпасибоAS3 try catch тяжелый?

ответ

3

Говоря об исключениях, как об общей практике, имейте в виду, что исключения являются «исключительными». Пока вы используете их для того, что они предназначены для обработки событий, которые не должны происходить, все должно быть хорошо.

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

+0

У меня есть приложение для чата, написанное в AS3, каждые 1,5 секунды я вызываю webservice для новых сообщений. Чат - это часть игры, существует множество мест, основанных на одном классе, который отвечает за итерацию базы данных. По этой причине я использую тот же класс в чате. Каждый раз, когда я вызываю URL-адрес webservice, в ответ я поставил try catch statement, чтобы поймать недопустимый json, если в файле php появляется проблема. Итак, в чате каждый вызов свежих сообщений проходит через инструкцию try catch. Я думаю, что это плохая идея? :) –

+0

Попытка - это просто утверждение, это не та часть, в которой работают боров. Это очень важная часть броска, так как интерпретатор должен распутать стек, чтобы «повысить» исключение, ища инструкцию catch, чтобы передать исключение. – Extrakun

1

Да попробовать и поймать заявление очень медленно (по сравнению с другими операциями), когда он уловов ошибка. Очевидно, что он имеет свою цель, но никогда не полагается на инструкцию try и catch для логического управления. Он существует для защиты кода, где имеет место ошибка (например, файл IO).

4

try/catch (как анонимная функция) создаст объект активации, который будет использовать больше памяти и не будет использовать регистр для вашей локальной переменной. Таким образом, используя его, он будет хранить память и замедлять вся функция используя его.

Вы можете посмотреть на avm2 performance PDF, например, он не говорил о try/catch, но вы можете посмотреть главу о закрытии метода, где описываются анонимные функции и использовать один и тот же mecanism для try/catch.

+0

, эта ссылка больше не относится к указанной документации. – SketchBookGames

+0

Улов будет замедлять метод, даже если он не используется, если он не является пустым блоком catch. –