private void TryCatchPerformance()
{
int iterations = 100000000;
Stopwatch stopwatch = Stopwatch.StartNew();
int c = 0;
for (int i = 0; i < iterations; i++)
{
try
{
// c += i * (2 * (int)Math.Floor((double)i));
c += i * 2;
}
catch (Exception ex)
{
throw;
}
}
stopwatch.Stop();
WriteLog(String.Format("With try catch: {0}", stopwatch.ElapsedMilliseconds));
Stopwatch stopwatch2 = Stopwatch.StartNew();
int c2 = 0;
for (int i = 0; i < iterations; i++)
{
// c2 += i * (2 * (int)Math.Floor((double)i));
c2 += i * 2;
}
stopwatch2.Stop();
WriteLog(String.Format("Without try catch: {0}", stopwatch2.ElapsedMilliseconds));
}
Выход, который я получаю:
With try catch: 68
Without try catch: 34
Итак, похоже, что использование блока try-catch кажется скорее быстрее?
То, что я нахожу еще более странным, это то, что когда я заменяю вычисление в теле for-loops чем-то более сложным, например: c += i * (2 * (int)Math.Floor((double)i));
Разница гораздо менее драматична.
With try catch: 640
Without try catch: 655
Я делаю что-то неправильно здесь или есть логическое объяснение для этого?