当前位置:编程学习 > C#/ASP.NET >>

异常处理的性能损失

using System; 
using System.Text; 
 
namespace 异常处理的性能损失 

    /// <summary> 
    /// C# 异常处理性能损耗 
    /// 代码作者:jehnjehn 
    /// Email:jehn@foxmail.com 
    /// 【jehnjehn推荐的原则:尽可能避免异常而不是捕获并处理异常】 
    /// </summary> 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            int testTimes = 10000;//自定义测试次数。 
            StringBuilder sb = new StringBuilder(string.Concat("执行", testTimes, 
                "次循环运算时,几种异常处理方式性能对比(按运行时间越短性能越高)")); 
            sb.AppendLine(Environment.NewLine); 
            System.Diagnostics.Stopwatch w = new System.Diagnostics.Stopwatch(); 
 
 
 
            //方式一:避免异常而非捕获异常 
            int a = 0; 
            w.Start(); 
            for (int i = 0; i <= testTimes; i++) 
            { 
                Int32.TryParse("a", out a); 
            } 
            w.Stop(); 
            sb.AppendLine(string.Concat("TypParse避免异常:", w.ElapsedMilliseconds, "ms")); 
 
 
 
            //屏蔽所有异常,这种易做图的写法仅供测试 
            w.Reset(); 
            w.Start(); 
            for (int i = 0; i <= testTimes; i++) 
            { 
                try 
                { 
                    Int32.Parse(null); 
                } 
                catch { } 
            } 
            w.Stop(); 
            sb.AppendLine(string.Concat("屏蔽式捕获所有异常:", w.ElapsedMilliseconds, "ms")); 
 
 
 
            //抛出指定的异常实例 
            w.Reset(); 
            w.Start(); 
            for (int i = 0; i <= testTimes; i++) 
            { 
                try 
                { 
                    if (!Int32.TryParse("a", out a)) 
                    { 
                        throw new ArgumentNullException(i.ToString()); 
                    } 
                } 
                catch { } 
            } 
            w.Stop(); 
            sb.AppendLine(string.Concat("抛出指定的异常实例:", w.ElapsedMilliseconds, "ms")); 
 
 
 
            //静态异常变量,仅测试 
            int b = 0; 
            Exception ex = new Exception(); 
            w.Reset(); 
            w.Start(); 
            for (int i = 0; i <= testTimes; i++) 
            { 
                try 
                { 
                    if (!Int32.TryParse("a", out b)) 
                    { 
                        throw ex; 
                    } 
                } 
                catch { } 
            } 
            w.Stop(); 
            sb.AppendLine(string.Concat("抛出静态异常:", w.ElapsedMilliseconds, "ms\n")); 
 
 
     &nb
补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,