讀【157個完美化C#的建議】一書的理解筆記 - 004
重點: 如標題 TryParse因為比Parse少了拋出異常例外的資訊,簡化為bool所以夠快
※Parse 為 .net FrameWork 1.0的產物 ,TryParse 為.net FrameWork 2.0的產物
流程說明 |
1. Parse執行1000次程式碼 |
2. TryParse執行1000次程式碼 |
3. 結果分析 |
4.結論 |
1. Parse執行1000次程式碼
以下為成功跑一千次的程式碼
/// <summary>
/// .Parse() 跑1000次,且成功
/// </summary>
/// <returns></returns>
private string parseSuccessful()
{
//計時開始
Stopwatch sw = Stopwatch.StartNew();
double tempValue = 0;
for (int i = 1000; i > 0; i--)
{
try
{
tempValue = double.Parse("123");
}
catch (Exception ex)
{
tempValue = 0;
}
}
//計時結束
sw.Stop();
return string.Format("parseSuccessful: {0}{1}", sw.Elapsed.ToString(), "\r\n");
}
以下為失敗跑一千次的程式碼
/// <summary>
/// .Parse() 跑1000次,且失敗
/// </summary>
/// <returns></returns>
private string parseFailure()
{
//計時開始
Stopwatch sw = Stopwatch.StartNew();
double tempValue = 0;
for (int i = 1000; i > 0; i--)
{
try
{
tempValue = double.Parse(null);
}
catch (Exception ex)
{
tempValue = 0;
}
}
//計時結束
sw.Stop();
return string.Format("parseFailure : {0}{1}", sw.Elapsed.ToString(), "\r\n");
}
2. TryParse執行1000次程式碼
以下為成功跑一千次的程式碼
/// <summary>
/// .TryParse() 跑1000次,且成功
/// </summary>
/// <returns></returns>
private string tryParseSuccessful()
{
//計時開始
Stopwatch sw = Stopwatch.StartNew();
double tempValue = 0;
for (int i = 1000; i > 0; i--)
{
if (double.TryParse("123", out tempValue) == false)
{
tempValue = 0;
}
}
//計時結束
sw.Stop();
return string.Format("tryParseSuccessful: {0}{1}", sw.Elapsed.ToString(), "\r\n");
}
以下為失敗跑一千次的程式碼
/// <summary>
/// .TryParse() 跑1000次,且失敗
/// </summary>
/// <returns></returns>
private string tryParseFailure()
{
//計時開始
Stopwatch sw = Stopwatch.StartNew();
double tempValue = 0;
for (int i = 1000; i > 0; i--)
{
if (double.TryParse(null, out tempValue) == false)
{
tempValue = 0;
}
}
//計時結束
sw.Stop();
return string.Format("tryParseFailure: {0}{1}", sw.Elapsed.ToString(), "\r\n");
}
3. 結果分析
主程式呼叫,顯示執行後的時間
private void Form1_Load(object sender, EventArgs e)
{
//Parse 效能
textBox_Perfomance.AppendText(this.parseSuccessful());
textBox_Perfomance.AppendText(this.parseFailure());
//TryParse 效能
textBox_Perfomance.AppendText(this.tryParseSuccessful());
textBox_Perfomance.AppendText(this.tryParseFailure());
}
執行結果
4.結論
Parse耗費時間 | TryParse耗費時間 | 相差時間 | 相差倍率 | |
成功 | 00:00:00.0002293 | 00:00:00.0001602 | 00:00:00.0000691 | 0.43倍 |
失敗 | 00:00:25.1429854 | 00:00:00.0000339 | 00:00:25.1429515 | 741679倍 |
TryParse因為比Parse少了拋出異常例外的資訊,簡化為bool所以夠快
github連結(Vs2015) : 點我下載