判斷是否為數值的四種寫法效能比較
- 2010-08-16
- 21377
- 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);
}








回應討論