Ссылка, приведенная в приведенном выше комментарии, показывает описание того, почему вы никогда не должны использовать try-catch, если if-statement предотвратит выброс исключения, но в интересах показа производительности в терминах Фактически, я написал эту небольшую тестовую программу.
Stopwatch watch = new Stopwatch();
int[] testArray = new int[] { 1, 2, 3, 4, 5 };
int? test = null;
watch.Start();
for (int i = 0; i < 10000; i++)
{
try
{
testArray[(int)test] = 0;
}
catch { }
}
watch.Stop();
Console.WriteLine("try-catch result:");
Console.WriteLine(watch.Elapsed);
Console.WriteLine();
watch.Restart();
for (int i = 0; i < 10000; i++)
{
if (test != null)
testArray[(int)test] = 0;
}
watch.Stop();
Console.WriteLine("if-statement result:");
Console.WriteLine(watch.Elapsed);
Результат программы заключается в следующем:
try-catch result:
00:00:32.6764911
if-statement result:
00:00:00.0001047
Как вы можете видеть, примерочную задвижку подход вводит значительные накладные расходы, когда исключение запутывается, принимая более 30 секунд, чтобы завершить 10000 циклов на моя машина. С другой стороны, if-statement работает так быстро, что он в основном мгновенен. По сравнению с попыткой, это улучшение производительности в районе 3 000 000%.
(Это не строгий тест, и есть способы написать его и запустить его по-разному, чтобы получить более точные цифры, но это должно дать вам представление о том, насколько эффективнее использовать if - заявка на попытку-ловушку, когда это возможно.)
'try..catch' вводит накладные расходы и не повышает производительность AFAIK. – user3185569
Это также для * исключительных ситуаций, которые не должны использоваться в ситуациях по умолчанию. Здесь проверка границ может показаться лучше, чем позволить исключениям. –
См. Http://stackoverflow.com/questions/8687113/if-condition-vs-exception-handler – Abion47