首页 > 程序开发 > 利用Stopwatch测试Parse()与TryParse()效率

利用Stopwatch测试Parse()与TryParse()效率

2008年10月24日

Stopwatch 是 .NET 2.0 新的類別,可用來測試程式碼效能,將測試的程式碼利用 Start() 與 Stop() 方法包住。再利用 ElapsedTicks 或 ElapsedMilliseconds 屬性,取得程式碼所花費的單位 ticks 或是毫秒時間。

下面程式碼,用來測試 int.Parse() 與 int.TryParse() 成功與否的四種情形。

程式碼:

  1. using System;
  2. using System.Diagnostics;
  3.  
  4. namespace StopwatchTes
  5. {
  6.     internal class Program
  7.     {
  8.         private static void Main(string[] args)
  9.         {
  10.             int num;
  11.             Stopwatch sw = null;
  12.             long ticks;
  13.  
  14.             // int.Parse 成功 
  15.             sw = Stopwatch.StartNew();
  16.             for (int i = 1; i < 1000; i++)
  17.             {
  18.                 try
  19.                 {
  20.                     num = int.Parse("12");
  21.                 }
  22.                 catch (FormatException)
  23.                 {
  24.                     num = 0;
  25.                 }
  26.             }
  27.             sw.Stop();
  28.             ticks = sw.ElapsedTicks;
  29.             Console.WriteLine("int.Parse() 成功,花費 {0} ticks", ticks);
  30.  
  31.             // int.TryParse 成功 
  32.             sw = Stopwatch.StartNew();
  33.             for (int i = 1; i < 1000; i++)
  34.             {
  35.                 if (int.TryParse("12", out num) == false)
  36.                 {
  37.                     num = 0;
  38.                 }
  39.             }
  40.             sw.Stop();
  41.             ticks = sw.ElapsedTicks;
  42.             Console.WriteLine("int.TryParse() 成功,花費 {0} ticks", ticks);
  43.  
  44.             // int.Parse 失敗 
  45.             sw = Stopwatch.StartNew();
  46.             for (int i = 1; i < 1000; i++)
  47.             {
  48.                 try
  49.                 {
  50.                     num = int.Parse("12a");
  51.                 }
  52.                 catch (FormatException)
  53.                 {
  54.                     num = 0;
  55.                 }
  56.             }
  57.             sw.Stop();
  58.             ticks = sw.ElapsedTicks;
  59.             Console.WriteLine("int.Parse() 失敗,花費 {0} ticks", ticks);
  60.  
  61.             // int.TryParse 失敗 
  62.             sw = Stopwatch.StartNew();
  63.             for (int i = 1; i < 1000; i++)
  64.             {
  65.                 if (int.TryParse("12a", out num) == false)
  66.                 {
  67.                     num = 0;
  68.                 }
  69.             }
  70.             sw.Stop();
  71.             ticks = sw.ElapsedTicks;
  72.             Console.WriteLine("int.TryParse() 失敗,花費 {0} ticks", ticks);
  73.             Console.WriteLine("End");
  74.         }
  75.     }
  76. }

int.Parse() 成功,花費 1384 ticks
int.TryParse() 成功,花費 1560 ticks
int.Parse() 失敗,花費 42801870 ticks
int.TryParse() 失敗,花費 1374 ticks

在一般情況下,TryParse() 所花費的時間會比 Parse() 來得多,且兩者的效率並不會相差太多!但是,在發生 Exception 的情形之下,Parse() 所付出的代價,卻是遠遠大於 TryParse()。因此,在撰寫程式碼的時候,如何避免程式發生 Exception 也是相當重要的課題。

程序开发 , ,

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.