Следующее может использоваться, чтобы протестировать на существование файла, и затем удалить его.
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
Существует стоимость, связанная с обработкой исключений на некоторых платформах и с некоторыми компиляторами.
А именно, Visual Studio, при сборке 32 -bit target, зарегистрирует обработчик в каждой функции, которая имеет локальные переменные с нетривиальным деструктором. По сути, он устанавливает обработчик try / finally
.
Другой метод, используемый gcc
и Visual Studio для 64-битных вычислений, вызывает накладные расходы только в случае исключения ] брошенный (метод включает обход стека вызовов и поиск в таблице). В случаях, когда исключения возникают редко, это может фактически привести к более эффективному коду, поскольку коды ошибок не нужно обрабатывать.
Только блок try / catch и try / except требует выполнения нескольких инструкций по настройке. Накладные расходы, как правило, должны быть незначительными во всех случаях, кроме самых больших петель. Но обычно вы бы все равно не использовали try / catch /, кроме как во внутреннем цикле.
Я бы посоветовал не беспокоиться об этом и вместо этого использовать профилировщик для оптимизации вашего кода там, где это необходимо.
Это полностью зависит от реализации, но многие недавние реализации имеют очень небольшие накладные расходы на производительность, если не генерируются исключения, или совсем их несут. На самом деле ты прав. Правильная проверка кодов возврата от всех функций в коде, который не использует исключения, может быть медленнее, чем ничего не делать для кода, использующего исключения.
Конечно, вам нужно будет измерить производительность для ваших конкретных требований, чтобы быть уверенным.
Там есть некоторые накладные расходы с исключениями (как указывали другие ответы).
Но в настоящее время у вас нет большого выбора. Попробуйте отключить исключения в своем проекте и убедитесь, что ВСЕ зависимый код и библиотеки могут компилироваться и работать без них.
Работают ли они с отключенными исключениями?
Предположим, что они работают! Затем протестируйте несколько случаев, но обратите внимание, что вы должны установить переключатель компиляции «отключить исключения». Без этого переключателя у вас все еще есть накладные расходы - даже если код никогда не генерирует исключения.
Только накладные расходы составляют ~ 6 инструкций, которые добавляют 2 SEH в начале функции и оставляют их в конце. Независимо от того, сколько попыток / ловушек у вас есть в потоке, это всегда одно и то же.
И что это за локальные переменные? Я слышу, как люди всегда жалуются на них при использовании try / catch. Я не понимаю, потому что деконструкторы все равно будут вызваны. Также вы не должны допускать, чтобы исключение увеличивалось более чем на 1-3 звонка.