判斷是否為數值的四種寫法效能比較
- 2010-08-16
- 21399
- 0
雖然現在已經晚了,但是剛好在整理程式碼,看到了一段很簡單的判斷是否為數字的方法覺得有點怪味道,所以就實地的寫了一寫小測試來看看到底是誰的效能高。
	 基本上 demo 使用了 Regex 、 int.TryParse、IsNumeric(使用MSDN的範例)、IsNumeric(引用VB),範例程式是寫在 ASP.NET MVC 的 View 上(為了方便嘛),以下是執行一百萬次後的結果,提供各位參考。
基本上 demo 使用了 Regex 、 int.TryParse、IsNumeric(使用MSDN的範例)、IsNumeric(引用VB),範例程式是寫在 ASP.NET MVC 的 View 上(為了方便嘛),以下是執行一百萬次後的結果,提供各位參考。
	 使用 Regex
使用 Regex
	開始時間:2010/8/17 下午 11:18:38
	結束時間:2010/8/17 下午 11:18:39
	共花費:1.1120636秒
	 使用 int.TryParse()
使用 int.TryParse()
	開始時間:2010/8/17 下午 11:18:39
	結束時間:2010/8/17 下午 11:18:39
	共花費:0.2200126秒
	 使用 IsNumeric(使用 MSDN 範例)
使用 IsNumeric(使用 MSDN 範例)
	開始時間:2010/8/17 下午 11:18:39
	結束時間:2010/8/17 下午 11:18:39
	共花費:0.244014秒
	 使用 IsNumeric(引用 VB 的)
使用 IsNumeric(引用 VB 的)
	開始時間:2010/8/17 下午 11:18:39
	結束時間:2010/8/17 下午 11:18:41
	共花費:1.591091秒
	 直接在頁面就寫下去囉
直接在頁面就寫下去囉
<%
        Response.Write("<h3>使用 Regex </h3>");
        DateTime startTime = DateTime.Now;
        bool temp;
        for (int i = 0; i < 1000000; i++)
        {
            string pattern = @"^[0-9]*$";
            temp = Regex.IsMatch("100", pattern);
        }
        DateTime endTime = DateTime.Now;
        Response.Write(string.Concat("開始時間:", startTime, "<br>", "結束時間:", endTime, "<br>", "共花費:", endTime.Subtract(startTime).TotalSeconds, "秒"));
        
        Response.Write(" <hr />");
        Response.Write("<h3>使用 int.TryParse() </h3>");
        DateTime startTime2 = DateTime.Now;
        int tempInt = 0;
        for (int i = 0; i < 1000000; i++)
        {
            int.TryParse("100", out tempInt);
        }
        DateTime endTime2 = DateTime.Now;
        Response.Write(string.Concat("開始時間:", startTime2, "<br>", "結束時間:", endTime2, "<br>", "共花費:", endTime2.Subtract(startTime2).TotalSeconds, "秒"));
       
        Response.Write(" <hr />");
        Response.Write("<h3>使用 IsNumeric(使用 MSDN 範例) </h3>");
        DateTime startTime3 = DateTime.Now;
        for (int i = 0; i < 1000000; i++)
        {
            MvcApplication1.Controllers.HomeController.IsNumeric("100");
        }
        DateTime endTime3 = DateTime.Now;
        Response.Write(string.Concat("開始時間:", startTime3, "<br>", "結束時間:", endTime3, "<br>", "共花費:", endTime3.Subtract(startTime3).TotalSeconds, "秒"));
     
        Response.Write(" <hr />");
        Response.Write("<h3>使用 IsNumeric(引用 VB 的) </h3>");
        DateTime startTime4 = DateTime.Now;
        for (int i = 0; i < 1000000; i++)
        {
            MvcApplication1.Controllers.HomeController.IsNumericVB("100");
        }
        DateTime endTime4 = DateTime.Now;
        Response.Write(string.Concat("開始時間:", startTime4, "<br>", "結束時間:", endTime4, "<br>", "共花費:", endTime4.Subtract(startTime4).TotalSeconds, "秒"));
      
      %>
	 IsNumeric 函式
IsNumeric 函式
public static bool IsNumeric(object Expression)
        {
            bool isNum;
            double retNum;
            isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
            return isNum;
        }
	 IsNumeric (vb) 函式
IsNumeric (vb) 函式
public static bool IsNumericVB(object Expression)
        {
            return Microsoft.VisualBasic.Information.IsNumeric(Expression);
        }








 Roslyn 魔法工坊:打造你的 Source Generator [2025-12-20]開課 共7H
Roslyn 魔法工坊:打造你的 Source Generator [2025-12-20]開課 共7H
回應討論