Улучшает ли более специфическая обработка исключений производительность?

Если я могу поймать более конкретное исключение, могу ли я помешать клиенту выполнять дополнительную работу и повысить производительность? Так что, если я знаю, что могу получить исключение для сокета, но мне не нужно обрабатывать его иначе, чем какое-то другое исключение, лучше ли все-таки иметь более конкретный улов? Я работаю над MicroFramework, поэтому стоит спросить о небольших улучшениях производительности и ресурсов.

 catch (System.Net.Sockets.SocketException netEx)
            {

            }

 catch (Exception ex)
            {

            }

1 ответ

Решение

Я бы не стал думать об этом с точки зрения производительности.

С точки зрения правильности кода: вы должны почти всегда catch самое конкретное исключение, которое вы можете.

Когда вы ловите Exception ваш обработчик исключений проглотит любое исключение, даже если вы не готовы его обработать. Представь ArgumentNullException брошен Блок захвата поглотит его и вызовет замешательство.

Если все, что вы готовы сделать, это SocketException тогда просто поймай это. Если он менее производительный, пусть будет так. Корректность кода - это не то, чем жертвовать ради такого незначительного прироста производительности *

* или вообще никакого прироста производительности - я почти уверен, что это никак не повлияет на производительность. Я сделал тест на своем компьютере, и производительность более или менее равна. Это был не всеобъемлющий тест, но этого было достаточно, чтобы подтвердить мой инстинкт. Вы можете запустить свой собственный тест, используя технику, подобную этой

Другие вопросы по тегам