попробуйте поймать выступление
это В статье, посвященной MSDN, говорится, что вы можете использовать столько блоков try catch, сколько захотите, и не понести никаких затрат на производительность до тех пор, пока не будет выдано фактическое исключение.
Так как я всегда считал, что трик-пойм всегда наносит небольшой удар по производительности, даже если не выбрасывать исключение, я провел небольшой тест.
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 чем-то более сложным, например:c += i * (2 * (int)Math.Floor((double)i));
Разница гораздо менее существенная.
With try catch: 640
Without try catch: 655
Я здесь что-то делаю не так или есть логическое объяснение этому?