判斷是否為數值的四種寫法效能比較
- 2010-08-16
- 19782
- 0
雖然現在已經晚了,但是剛好在整理程式碼,看到了一段很簡單的判斷是否為數字的方法覺得有點怪味道,所以就實地的寫了一寫小測試來看看到底是誰的效能高。
基本上 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); }
回應討論