попробуйте поймать выступление

это В статье, посвященной 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

Я здесь что-то делаю не так или есть логическое объяснение этому?

Ответы на вопрос(7)

Ваш ответ на вопрос