demoshop

demo, trying to be the best_

雖然現在已經晚了,但是剛好在整理程式碼,看到了一段很簡單的判斷是否為數字的方法覺得有點怪味道,所以就實地的寫了一寫小測試來看看到底是誰的效能高。

demo廢言基本上 demo 使用了 Regex 、 int.TryParse、IsNumeric(使用MSDN的範例)、IsNumeric(引用VB),範例程式是寫在 ASP.NET MVC 的 View 上(為了方便嘛),以下是執行一百萬次後的結果,提供各位參考。

 

●使用 Regex

開始時間:2010/8/17 下午 11:18:38
結束時間:2010/8/17 下午 11:18:39
共花費:1.1120636秒


●使用 int.TryParse()

開始時間:2010/8/17 下午 11:18:39
結束時間:2010/8/17 下午 11:18:39
共花費:0.2200126秒


●使用 IsNumeric(使用 MSDN 範例)

開始時間:2010/8/17 下午 11:18:39
結束時間:2010/8/17 下午 11:18:39
共花費:0.244014秒


●使用 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 函式

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) 函式

public static bool IsNumericVB(object Expression)
        {
            return Microsoft.VisualBasic.Information.IsNumeric(Expression);
        }

回應討論