Я родом из питона, где часто говорят, что легче извиниться, чем спрашивать разрешения. Специально дано два фрагмента:
if type(A) == int:
do_something(A)
else:
do_something(int(A))
try:
do_something(A)
except TypeError:
do_something(int(A))
Тогда в большинстве сценариев использования второй будет быстрее, когда A обычно является целым числом (при условии, что do_something требует целое число в качестве входных данных и вызовет его исключение довольно быстро), поскольку вы теряете логический тест из каждого цикла выполнения за счет более дорогостоящего исключения, но гораздо реже.
Что я хотел проверить, так ли это в C #, или логические тесты достаточно быстры по сравнению с исключениями, чтобы сделать это маленьким угловым случаем?
Да, и меня интересует только производительность релиза, а не отладка.
ОК, мой пример был слишком расплывчатым, попробуйте этот:
Наивное решение:
return float(A) % 20 # coerse A to a float so it'll only fail if we actually don't
# have anything that can be represented as a real number.
Логическое решение:
if isinstance(A, Number): # This is cheaper because we're not creating a new
return A % 20 # object unless we really have to.
else:
return float(A) %20
Решение на основе исключений:
try: # Now we're doing any logical tests in the 99% of cases where A is a number
return A % 20
except TypeError:
return float(A) % 20
Примеры использования FSO, соединений с базами данных или чего-то другого по сети лучше, но немного скучны для вопроса.