C# TryParse比Parse效率更高

除了string外的所有基元类型都有两个将字符串转型为本身的方法:Parse和TryParse。

Parse方法:如果字符串格式不满足转换要求,会引发一个一次异常。

TryParse方法:如果字符串格式不满足转换要求,会返回false,同时将接收的变量置为初始值。

例:

1 public static double Parse(string s);
2 public static bool TryParse(string s, out double result);

引发异常这个过程会对性能造成损耗

实验代码:

 1             double re;
 2             long ticks;
 3 
 4             Stopwatch sw = Stopwatch.StartNew();
 5             for (int i = 0; i < 1000; i++)
 6             {
 7                 try
 8                 {
 9                     re = double.Parse("123");
10                 }
11                 catch
12                 {
13                     re = 0;
14                 }
15             }
16             sw.Stop();
17             ticks = sw.ElapsedTicks;
18             Console.WriteLine("double.Parse() 成功,{0} ticks", ticks);
19 
20             sw = Stopwatch.StartNew();
21             for (int i = 0; i < 1000; i++)
22             {
23                 if (double.TryParse("123", out re) == false)
24                 {
25                     re = 0;
26                 }
27             }
28             sw.Stop();
29             ticks = sw.ElapsedTicks;
30             Console.WriteLine("double.TryParse() 成功,{0} ticks", ticks);
31 
32             sw = Stopwatch.StartNew();
33             for (int i = 0; i < 1000; i++)
34             {
35                 try
36                 {
37                     re = double.Parse("aaa");
38                 }
39                 catch
40                 {
41                     re = 0;
42                 }
43             }
44             sw.Stop();
45             ticks = sw.ElapsedTicks;
46             Console.WriteLine("double.Parse() 失败,{0} ticks", ticks);
47 
48             sw = Stopwatch.StartNew();
49             for (int i = 0; i < 1000; i++)
50             {
51                 if (double.TryParse("aaa", out re) == false)
52                 {
53                     re = 0;
54                 }
55             }
56             sw.Stop();
57             ticks = sw.ElapsedTicks;
58             Console.WriteLine("double.TryParse() 失败,{0} ticks", ticks);        

运行结果:

double.Parse() 成功,1393 ticks
double.TryParse() 成功,1480 ticks
double.Parse() 失败,72487036 ticks
double.TryParse() 失败,886 ticks

执行成功,Parse和TryParse方法的效率在一个数量级上;执行失败;Parse方法的执行效率明显远低于TryParse方法。

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

原文地址:https://www.cnblogs.com/xuyouyou/p/13151387.html