利用Stopwatch测试Parse()与TryParse()效率
Stopwatch 是 .NET 2.0 新的類別,可用來測試程式碼效能,將測試的程式碼利用 Start() 與 Stop() 方法包住。再利用 ElapsedTicks 或 ElapsedMilliseconds 屬性,取得程式碼所花費的單位 ticks 或是毫秒時間。
下面程式碼,用來測試 int.Parse() 與 int.TryParse() 成功與否的四種情形。
程式碼:
- using System;
- using System.Diagnostics;
- namespace StopwatchTes
- {
- internal class Program
- {
- private static void Main(string[] args)
- {
- int num;
- Stopwatch sw = null;
- long ticks;
- // int.Parse 成功
- sw = Stopwatch.StartNew();
- for (int i = 1; i < 1000; i++)
- {
- try
- {
- num = int.Parse("12");
- }
- catch (FormatException)
- {
- num = 0;
- }
- }
- sw.Stop();
- ticks = sw.ElapsedTicks;
- Console.WriteLine("int.Parse() 成功,花費 {0} ticks", ticks);
- // int.TryParse 成功
- sw = Stopwatch.StartNew();
- for (int i = 1; i < 1000; i++)
- {
- if (int.TryParse("12", out num) == false)
- {
- num = 0;
- }
- }
- sw.Stop();
- ticks = sw.ElapsedTicks;
- Console.WriteLine("int.TryParse() 成功,花費 {0} ticks", ticks);
- // int.Parse 失敗
- sw = Stopwatch.StartNew();
- for (int i = 1; i < 1000; i++)
- {
- try
- {
- num = int.Parse("12a");
- }
- catch (FormatException)
- {
- num = 0;
- }
- }
- sw.Stop();
- ticks = sw.ElapsedTicks;
- Console.WriteLine("int.Parse() 失敗,花費 {0} ticks", ticks);
- // int.TryParse 失敗
- sw = Stopwatch.StartNew();
- for (int i = 1; i < 1000; i++)
- {
- if (int.TryParse("12a", out num) == false)
- {
- num = 0;
- }
- }
- sw.Stop();
- ticks = sw.ElapsedTicks;
- Console.WriteLine("int.TryParse() 失敗,花費 {0} ticks", ticks);
- Console.WriteLine("End");
- }
- }
- }
int.Parse() 成功,花費 1384 ticks
int.TryParse() 成功,花費 1560 ticks
int.Parse() 失敗,花費 42801870 ticks
int.TryParse() 失敗,花費 1374 ticks
在一般情況下,TryParse() 所花費的時間會比 Parse() 來得多,且兩者的效率並不會相差太多!但是,在發生 Exception 的情形之下,Parse() 所付出的代價,卻是遠遠大於 TryParse()。因此,在撰寫程式碼的時候,如何避免程式發生 Exception 也是相當重要的課題。



最近评论