外贸领航
首页行业资讯 > c程序优化方法「如何运行一个C程序」

c程序优化方法「如何运行一个C程序」

来源:互联网 2023-05-19 16:04:00
一 使用TryParse,而不是Parse

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

以double类型为例,这两个方法最简单的原型为:

public static Double Parse(string s);public static bool TryParse(string s, out Double result);

两者最大的区别是:如果字符串不满足转换的要求,Parse方法将引发一个异常。TryParse方法不会引发异常,它会返回false,同时将result置为0。

调用Parse方法,如果转型失败,则要将值设定为一个初始值,同时必须要捕获异常:

var str = string.Empty;double d;try{ d = double.Parse(str);}catch (Exception ex){ d = 0;}

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

从 .Net 2.0 开始,FCL开始对基元类型提供TryParse方法。下例对Parse和TryParse做个实验对比:

double result;var sw = Stopwatch.StartNew();for (int i = 0; i < 1000; i ){ try { result = double.Parse("123"); } catch { result = 0; }}sw.Stop();Console.WriteLine($"Parse Success, {sw.ElapsedTicks} ticks");sw = Stopwatch.StartNew();for (int i = 0; i < 1000; i ){ if (double.TryParse("123", out result) == false) { result = 0; }}sw.Stop();Console.WriteLine($"TryParse Success, {sw.ElapsedTicks} ticks");sw = Stopwatch.StartNew();for (int i = 0; i < 1000; i ){ try { result = double.Parse("abc"); } catch { result = 0; }}sw.Stop();Console.WriteLine($"Parse Failed, {sw.ElapsedTicks} ticks");sw = Stopwatch.StartNew();for (int i = 0; i < 1000; i ){ if (double.TryParse("abc", out result) == false) { result = 0; }}sw.Stop();Console.WriteLine($"TryParse Failed, {sw.ElapsedTicks} ticks");

输出:

Parse Success, 3663 ticksTryParse Success, 910 ticksParse Failed, 13685860 ticksTryParse Failed, 716 ticks

可见,TryParse的执行效率高于Parse。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如有侵权行为,请第一时间联系我们修改或删除,多谢。

CopyRight © 外贸领航 2023 All Rights Reserved.