[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();
}
}
}
下面是输出屏幕
在方法 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”是以牺牲代码性能为代价的,它会影响代码的运行速度,因此我们要谨慎使用它。另外,不要为用户输入验证引发异常,因为异常对象是非常昂贵的。
相关文章
- 站长推荐