Нет способа, который должен занимать секунду для 1900 итераций, если вы не работаете в отладчике. Выполнение тестов производительности под отладчиком - плохая идея.
РЕДАКТИРОВАТЬ: обратите внимание, что это не случай перехода на выпуск build - это случай запуска без отладчика; то есть нажатие Ctrl-F5 вместо F5 .
Сказав это, провоцировать исключения, когда их можно очень легко избежать, также плохая идея.
Мой взгляд на производительность исключений: если вы используете их надлежащим образом, они не должны вызывать значительных проблем с производительностью , если в любом случае вы не находитесь в какой-то катастрофической ситуации (например, вы пытаетесь сотни тысяч вызовов веб-служб, и сеть не работает).
Исключения являются дорогостоящими при отладчиках - в любом случае, конечно, в Visual Studio - из-за того, что приходится разбираться с отладчиком и т. Д., И, вероятно, выполнять любой объем стекового анализа, который в противном случае не нужен. В любом случае они все еще стоят несколько дорого, но вы не должны бросать их достаточно, чтобы заметить. Остается выполнить раскрутку стека, найти соответствующие обработчики перехвата и т. Д., Но это должно происходить только тогда, когда что-то не так с самого начала.
РЕДАКТИРОВАТЬ: Конечно, создание исключения по-прежнему будет давать вам меньше итераций в секунду (хотя 35000 все еще очень низкое число - я бы ожидал более 100К), потому что вы делаете почти ничего в случае не исключения. Давайте посмотрим на два:
Неисключительная версия тела цикла
- Присвоить ноль переменной
- Проверить, является ли переменная нулевой; это так, так что вернитесь к началу цикла
(Как уже упоминалось в комментариях, вполне возможно, что JIT все равно оптимизирует это ...)
Исключительная версия:
- Присвоить ноль переменной
- переменная разыменования
- Неявная проверка на ничтожность
- Создать объект исключения
- Проверка любых отфильтрованных обработчиков исключений для вызова
- Найдите в стеке блок перехвата, чтобы перейти к
- Проверьте, нет ли блоков наконец
- Филиал соответственно
Удивительно ли, что вы видите меньше производительности?
Теперь сравните это с более распространенной ситуацией, когда вы выполняете целую кучу работы, возможно, ввода-вывода, создания объектов и т. Д. - и , возможно, , возникает исключение. Тогда разница станет намного менее значимой.