建议64:为循环增加Tester-Doer模式而不是将try-catch置于循环内 如果需要在循环中引发异常,你需要特别注意,应为抛出异常是一个相当影响性能的过程。应该尽量在循环当中对异常发生的一

来源:互联网 发布:唐璜歌剧经典曲目知乎 编辑:程序博客网 时间:2024/06/05 14:39

建议64:为循环增加Tester-Doer模式而不是将try-catch置于循环内

 如果需要在循环中引发异常,你需要特别注意,应为抛出异常是一个相当影响性能的过程。应该尽量在循环当中对异常发生的一些条件进行判断,然后根据条件进行处理。

做个测试:

复制代码
            Stopwatch watch = Stopwatch.StartNew();            int x = 0;            for (int i = 0; i < 10000; i++)            {                try                {                    int j = i / x;                }                catch                {                }            }            Console.WriteLine(watch.ElapsedMilliseconds);            watch = Stopwatch.StartNew();            for (int i = 0; i < 10000; i++)            {                if (x == 0)                {                    continue;                }                int j = i / x;            }            Console.WriteLine(watch.ElapsedMilliseconds);            Console.ReadKey();
复制代码

输出为:

796

0

以上代码中,我们预见了代码肯能会发生DivideByZeroException异常,于是,调正策略,对异常发生的条件进行了特殊处理:Continue让效率得到了极大的提升。

 

 

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

0 0