技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

[C#技巧]在for循环外比在for循环内使用try-catch速度快

作者:admin    时间:2023-5-5 10:18:30    浏览:

C#编程中try-catch非常常用,它是用来处理异常的结构,不过“尝试-捕捉”是以牺牲代码性能为代价的,它会影响代码的运行速度,因此我们要谨慎使用它。

不要在for循环内使用try-catch

本文通过实测,证明在for循环内比在for循环外使用try-catch速度慢很多。测试代码如下:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Diagnostics;  
using System.IO;  
using System.Net;  
using System.Net.NetworkInformation;  
namespace Test1  
{  
    class Program  
    {  
        static void Method1()  
        {  
            for (int i = 0; i < 1000; i++)  
            {  
                try  
                {  
                    int value = i * 100;  
                    if (value == -1)  
                    {  
                        throw new Exception();  
                    }  
                }  
                catch  
                {  
                }  
            }  
        }  
        static void Method2()  
        {  
            try  
            {  
                for (int i = 0; i < 1000; i++)  
                {  
                    int value = i * 100;  
                    if (value == -1)  
                    {  
                        throw new Exception();  
                    }  
                }  
            }  
            catch  
            {  
            }  
        }  
        static void Main(string[] args)  
        {  
            Stopwatch sw = new Stopwatch();  
            sw.Start();  
            Method1();  
            sw.Stop();  
            Console.WriteLine("Within Loop " + sw.ElapsedTicks);  
            sw.Restart();  
            Method2();  
            sw.Stop();  
            Console.WriteLine("Outside of Loop " + sw.ElapsedTicks);  
            Console.ReadLine();  
        }  
    }  
}  

下面是输出屏幕

 在for循环内比在for循环外使用try-catch速度慢2倍

在方法 1 中的这个程序中,我在 for 循环中实现了异常处理机制,而在方法 2 中,我在没有循环的情况下实现了它。我们的输出窗口显示,如果我们在 for 循环之外实现 try-catch,那么我们的程序执行速度将比循环内的 try-catch 快 2 倍。

因此,不要在项目的循环内实现 try-catch,不仅在 for 循环内,而且在任何循环内。

不要在用户输入时处理异常

你是否使用异常处理机制来验证用户的输入?

如果是,那么你就是将项目执行速度降低 62 倍的人。例如,如下所示:

class BusinessLogcCheck  
{  
    public void Check()  
    {  
        try  
        {  
            //Your validation code is here  
        }  
        catch (Exception ex)  
        {  
            throw new Exception("My own exception");  
        }  
    }  
}  

在下一个示例中,如果你看到输出屏幕,你就会意识到这种做法有多糟糕。让我们看看下面的代码。

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Diagnostics;  
using System.IO;  
using System.Net;  
using System.Net.NetworkInformation;  
namespace Test1  
{  
    class Program  
    {  
        public static void ThrowTest()  
        {  
            throw new Exception("This is exceptopn");  
        }  
        public static Boolean Return()  
        {  
            return false;  
        }  
        static void Main(string[] args)  
        {  
            Stopwatch sw = new Stopwatch();  
            sw.Start();  
            try  
            {  
                    ThrowTest();  
            }  
            catch  
            {  
            }  
            sw.Stop();  
            Console.WriteLine("With Exception " + sw.ElapsedTicks);  
            sw.Restart();  
            try  
            {  
                Return();  
            }  
            catch  
            {  
            }  
            sw.Stop();  
            Console.WriteLine("With Return " + sw.ElapsedTicks);  
            Console.ReadLine();  
        }  
    }  
}  

下面是执行结果

 不要在用户输入时处理异常

我的概念证明非常简单。在一个函数中我引发异常,在另一个函数中我在检查用户输入后返回一个布尔值。我附上了一个计算器屏幕,让你相信异常处理是如何影响代码性能的。

因此,我们可以得出一个结论“不要为用户输入验证引发异常,而是使用布尔返回技术(或类似技术)来验证业务逻辑中的输入”,因为异常对象是非常昂贵的。

总结

C#使用“try-catch”是以牺牲代码性能为代价的,它会影响代码的运行速度,因此我们要谨慎使用它。另外,不要为用户输入验证引发异常,因为异常对象是非常昂贵的。

相关文章

标签: asp.net  CSharp  代码性能  优化  try-catch  for  
x
  • 站长推荐
/* 左侧显示文章内容目录 */